Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

API функции или библиотечные

23K
11 марта 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Совсем недавно начал изучать С и заметил, что для многих библиотечных функций есть аналоги в виде API функций. Например такие аналоги существуют для функций работы с памятью или файлами (HeapAlloc и malloc, fopen и CreateFile и т.д.). Так вот вопрос: в чем разница и если она есть, то в каком случае использовать API а в каком библиотеки?
1.8K
11 марта 2009 года
igor_nf
256 / / 13.12.2006
Библиотечные функции зачастую(если не всегда) реализуются через апи.
23K
11 марта 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Т.е. API будут работать чуточку быстрее?
3
11 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: Inc(Dec(i))
Т.е. API будут работать чуточку быстрее?


А ты куда-то спешишь?

15K
11 марта 2009 года
kant
64 / / 02.06.2007
WinAPI работает только на виндовс.
fopen(),malloc() и т.д. - стандартные функцие языка C - это означает что они работают на любой ОС.

Может быть HeapAlloc() будет работать быстрее чем malloc(), но я сомневаюсь что CreateFile() будет работать быстрее чем fopen().

Могу вам посоветовать чтобы вы старались писать программы на стандартных функциях, тогда ваши коды будут переносимы на Линукс,Уникс,виндовс и т.д.
87
11 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Дело не в быстродействии. API функции часто имеют больше настроек, больше возможностей, чем аналоги из стандартных библиотек. Например, CreateFile() используется даже для обмена данными с COM-портом.

Но если эти возможности не нужны, то, действительно, лучше использовать что-то более универсальное.
3
12 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
Например, CreateFile() используется даже для обмена данными с COM-портом.


fopen("/dev/ttyS0") или fopen("com1")

7
12 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Inc(Dec(i))
…для многих библиотечных функций есть аналоги в виде API функций…


Вообще-то немного наоборот:библиотечные функции базируются на WinAPI:)(когда речь идёт о Windows,конечно)

2 kant: Почему fopen будет быстрее CreateFile?Вот уж не думаю…Оболочка для какой-то функции явно не будет работать быстрее неё самой

Напоследок:может,автору вовсе и не надо кроссплатформенность?Спросим у самого автора:)

3
12 марта 2009 года
Green
4.8K / / 20.01.2000
Да при чем тут кросплатформенность и т.п.
Есть одно простое правило: если что-то можно и достаточно просто реализовать своими средствами, не зачем прибегать к посторонней помощи.
WinAPI для языка C является внешней сущностью ("сторонней библиотекой"), если нет явной необходимости, то зачем городить огород?
15K
12 марта 2009 года
kant
64 / / 02.06.2007
Цитата: @pixo $oft
Вообще-то немного наоборот:библиотечные функции базируются на WinAPI:)(когда речь идёт о Windows,конечно)

2 kant: Почему fopen будет быстрее CreateFile?Вот уж не думаю…Оболочка для какой-то функции явно не будет работать быстрее неё самой



 
Код:
#include <stdio.h>

int main(void)
{
    FILE * f = fopen("file.txt","w");
}


Написал вот такую маленькую программу, если то что вы пишете правда то данная программа должна использовать функцию CreateFile(), вот только она этого не делает.

Проверял с диссамблером из программы PE-Explorer,написано что используется функция fopen,библиотека CRTDLL.dll.
260
12 марта 2009 года
Ramon
1.1K / / 16.08.2003
Цитата: kant
 
Код:
#include <stdio.h>

int main(void)
{
    FILE * f = fopen("file.txt","w");
}


Написал вот такую маленькую программу, если то что вы пишете правда то данная программа должна использовать функцию CreateFile(), вот только она этого не делает.

Проверял с диссамблером из программы PE-Explorer,написано что используется функция fopen,библиотека CRTDLL.dll.



Паровоз следует с остановками. Проедьте до следующей.

15K
12 марта 2009 года
kant
64 / / 02.06.2007
Цитата: Ramon
Паровоз следует с остановками. Проедьте до следующей.



Не понял.:confused:

5
12 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: kant
Не понял.:confused:


А какую функцию, в свою очередь, вызывает fopen?
Или вы правда считаете, что она умеет напрямую работать с драйвером fat32 или ntfs?

87
12 марта 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green
fopen("/dev/ttyS0") или fopen("com1")


Возможно, пример этот не очень удачен, но наверное стандартные функции не предназначены для такой работы, и это использование проходит из-за конкретной реализации. Хотя подробно не исследовал.

Но в любом случае, при работе с fopen приходится ограничиваться синхронными операциями ввода-вывода, ограничены настройки защиты файла, совместного использования и т.д. Все это я говорю по памяти. Можно подробнее покапаться, если есть недоверие.

3
12 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: kant
Не понял.:confused:


Попробуй разобраться, что такое CRTDLL.
CRTDLL - это ещё не "конечная станция"

15K
12 марта 2009 года
kant
64 / / 02.06.2007
Цитата: Green
Попробуй разобраться, что такое CRTDLL.
CRTDLL - это ещё не "конечная станция"



Ага,спасибо.

Нашел я, CRTDLL.dll свою очередь пользуется WinAPI функциями с KERNEL32.dll,и там же находится CreateFile()

7
12 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: kant
Проверял с диссамблером из программы PE-Explorer,написано что используется функция fopen,библиотека CRTDLL.dll.

Конечно,так и будет!Я ж не утверждал,что она напрямую будет использоваться…Будто нельзя было дальше CRTDLL заглянуть.Она ж 145 кб весит!Куда уж там всем функциям ввода/вывода поместиться?:)
Да и не дизассемблером это надо проверять,а хотя бы Dependency walker'ом

15K
12 марта 2009 года
kant
64 / / 02.06.2007
Цитата: @pixo $oft
Конечно,так и будет!Я ж не утверждал,что она напрямую будет использоваться…Будто нельзя было дальше CRTDLL заглянуть.Она ж 145 кб весит!Куда уж там всем функциям ввода/вывода поместиться?:)
Да и не дизассемблером это надо проверять,а хотя бы Dependency walker'ом



А чем тебе не нравиться результат который возвращает диссамблер ?

7
13 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
А я и не писал,что он мне не нравится:)
Просто DW для этих случае подходит лучше.Открой ты им файл в самом начале,дерево зависимостей сразу б показало тебе,как ты неправ насчёт DLL'ек:)
1.6K
13 марта 2009 года
Vov4ick
476 / / 01.02.2007
Цитата: Green
WinAPI для языка C является внешней сущностью ("сторонней библиотекой"), если нет явной необходимости, то зачем городить огород?


Для языка Ц все функции являются внешней сущностью. Другое дело, поставляются они в комплекте с компилятором или нет.

Цитата: Kogrom
Возможно, пример этот не очень удачен, но наверное стандартные функции не предназначены для такой работы, и это использование проходит из-за конкретной реализации. Хотя подробно не исследовал.
Но в любом случае, при работе с fopen приходится ограничиваться синхронными операциями ввода-вывода, ограничены настройки защиты файла, совместного использования и т.д. Все это я говорю по памяти. Можно подробнее покапаться, если есть недоверие.



Это не особенности функции fopen\CreateFile, а особенности ОС, как DOS, так и UNIX - работа со стандартными устройствами как с файлами. Хотите больше возможностей, чем простой ввод-вывод без контроля - нужно использовать специально предназначенные для этого функции, которые есть как в DOS\win, так и в UNIX.

Настройте компилятор, чтобы используемые функции прилинковывались к программе, а не брались из библиотек. Это поможет нормально разобраться с импортом и прибавит переносимости - не нужно будет таскать за собой кучу библиотек с сишными функциями.

3
13 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: Vov4ick

Для языка Ц все функции являются внешней сущностью. Другое дело, поставляются они в комплекте с компилятором или нет.


Глупость. CRT является частью языка.
Хотя, может в языке Ц это и не так, но я такого языка не знаю. :)

Цитата: Vov4ick

Это не особенности функции fopen\CreateFile, а особенности ОС, как DOS, так и UNIX - работа со стандартными устройствами как с файлами. Хотите больше возможностей, чем простой ввод-вывод без контроля - нужно использовать специально предназначенные для этого функции, которые есть как в DOS\win, так и в UNIX.


Непонятно, что ты этим хотел сказать...
При чем тут DOS?

Разве это не особенность ф-ции fread, что она не предназначена для асинхронных операций, хоть и оборачивает ReadFile, который предназначен для асинхронных операций.
При чем тут особенность ОС?

Цитата: Vov4ick

Настройте компилятор, чтобы используемые функции прилинковывались к программе, а не брались из библиотек.


Настройте компилятор? Сам то понял, что сказал?
А какое отношение имеет компилятор к линковке?
И что значит "прилинковывались к программе, а не брались из библиотек" ? :)
Наверное ты хотел сказать: "чтоб библиотеки прилинковывались статически, а не динамически" ?
Но библиотеки то от этого никуда не денутся.

И какое это имеет отношение к фразе Kogrom ?
Если fopen будет привязан статически, появится возможность использовать его для динамических операций?

Цитата: Vov4ick

Это поможет нормально разобраться с импортом


Кому поможет?
У кого-то здесь проблемы с импортом? Обратитесь в таможню, там Вам помогут.

Цитата: Vov4ick

и прибавит переносимости - не нужно будет таскать за собой кучу библиотек с сишными функциями.


Обычно под "переносимостью" подразумевается возможность компиляции программы под разные платформы.

1.6K
13 марта 2009 года
Vov4ick
476 / / 01.02.2007
Цитата: Green
Глупость. CRT является частью языка.
Хотя, может в языке Ц это и не так, но я такого языка не знаю. :)


Частью устоявшегося синтаксиса языка - да. Но от этого они не стали его обязательной частью и принципиальных отличий между функциями ANSI C и другими нет. Мы рассуждали о том, что функции внешние, а не о стандартах на язык. Это разные вещи.

Цитата: Green
Непонятно, что ты этим хотел сказать...
При чем тут DOS?


Что сказал, то и хотел. DOS при том, что принципы организации такой работы с устройствами в винде унаследованы от неё. Хотя вначале всё равно была UNIX :)

Цитата: Green
Разве это не особенность ф-ции fread, что она не предназначена для асинхронных операций, хоть и оборачивает ReadFile, который предназначен для асинхронных операций.
При чем тут особенность ОС?


Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.

Цитата: Green
Настройте компилятор? Сам то понял, что сказал?
А какое отношение имеет компилятор к линковке?


Если вы такой дотошный, то нужно настроить компоновщик. Однако автор меня скорее всего не понял бы.

Цитата: Green
И что значит "прилинковывались к программе, а не брались из библиотек" ? :)
Наверное ты хотел сказать: "чтоб библиотеки прилинковывались статически, а не динамически" ?


Да, это я и хотел сказать, выразившись простым языком.

Цитата: Green
Но библиотеки то от этого никуда не денутся.
И какое это имеет отношение к фразе Kogrom ?
Если fopen будет привязан статически, появится возможность использовать его для динамических операций?


Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.

Цитата: Green
Кому поможет?
У кого-то здесь проблемы с импортом? Обратитесь в таможню, там Вам помогут.


Если вам не знакомо слово импорт применительно к написанию программ под ОС windows, обратитесь к справочнику программиста или в раздел для начинающих. Свою мысль я разъяснил выше.

Цитата: Green
Обычно под "переносимостью" подразумевается возможность компиляции программы под разные платформы.


Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.

1
13 марта 2009 года
kot_
7.3K / / 20.01.2000
Цитата:

Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.


Цитата:

Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.


Цитата:

Если вам не знакомо слово импорт применительно к написанию программ под ОС windows, обратитесь к справочнику программиста или в раздел для начинающих. Свою мысль я разъяснил выше



Цитата:

Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.



я плакаль.
Нельзя ли без ссылок на "разъяснил выше", простым человеческим языком пояснить что хотелось сказать? А то меня терзают смутные сомнения.

3
13 марта 2009 года
Green
4.8K / / 20.01.2000
Цитата: Vov4ick

Частью устоявшегося синтаксиса языка - да. Но от этого они не стали его обязательной частью и принципиальных отличий между функциями ANSI C и другими нет. Мы рассуждали о том, что функции внешние, а не о стандартах на язык. Это разные вещи.


Тогда что по твоему такое язык программирования C? Получается, только синтаксис.
Принципиальные отличия между функциями ANSI C и другими ЕСТЬ. Первые являются стандартными. Т.е. независимо от того, где исполняется программа написанная на C, "родные" функции должны работать так, как указано в стандарте. Другие могут работать так, как захочет разработчик этих функций.
А что ты подразумеваешь под "внешними" ?

Цитата: Vov4ick

Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.


Опять не понимаю, что ты пытаешься доказать.
Функции Win API (как пример ОС API) могут работать и так и этак, а fread работает ТОЛЬКО так. Разве это не особенность fread? При чем тут особенность ОС?
Кроме того, можно обучить fread работать как с потоком (по другому она не умеет) с устройствами совсем не потокового рода.
При чем тут влияние ОС на fread не понимаю...

Цитата: Vov4ick

Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.


Могу разочаровать, даже при статической линковке не всегда есть такая возможность разобраться по IAT.
Да и зачем?

Цитата: Vov4ick

Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.


Небольшое отступление: на другой машине не обязательно должна быть установлена среда разработки, достаточно будет установить CRT из спец. поставляемых пакетов.

1.6K
13 марта 2009 года
Vov4ick
476 / / 01.02.2007
Цитата: Green
Тогда что по твоему такое язык программирования C? Получается, только синтаксис.


По определению, язык - это набор символов, их значений и правил. Сюда можно отнести правила записи программы. Но названия функций под это определение по-моему не подходят. Скорее можно провести аналогию с жаргоном в человеческом языке.
Под внешними функциями я подразумеваю то же, что и ты

Цитата: Green
WinAPI для языка C является внешней сущностью ("сторонней библиотекой")...


Если конечно ты не имел в виду динамически подгружаемые. Хотя и типовые функции языка могут быть такими.

Цитата: Green
Опять не понимаю, что ты пытаешься доказать.

Я лишь хочу сказать, что первична такая особенность ОС, а особенности функций ANSI C унаследованы из особенностей ОС. Функция перенаправляет свои параметры функции ОС, кардинально их не меняя.

Цитата: Green
с устройствами совсем не потокового рода.

Только если драйвер устройства реализует потоковые функции. и сопоставит устройству файл. Физически устройство разумеется может быть каким угодно, в этом и состоит функция драйвера.

Цитата: Green
Могу разочаровать, даже при статической линковке не всегда есть такая возможность разобраться по IAT.
Да и зачем?

Автор хотел узнать, какие функции системы вызываются его программой. Ради этого всё и затевалось. Статическая же линковка в значительной мере упростит его задачу. Думаю в программе автора таких проблем не будет. Там скорее всего не используются ни загрузка библиотек самой программой, ни функции COM.

Цитата: Green
достаточно будет установить CRT из спец. поставляемых пакетов.


Для этого эти пакеты надо найти и скачать, что возможно не всегда, создаёт неудобства и к тому же закачиваются не только нужные функции, а много лишнего. Автору же программы достаточно поставить пару галочек в настройках, чтобы нужные функции прилинковались к программе.

7
13 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Что-то вы уж слишком распалились.Автор,наверное,уже потерял интерес к теме:)…не думаю,что ему вся эта писанина понятна
Думаю,он удовлетворил свой интерес,а вам советую завязывать с перепалкой–спать пора:)
Вы тут хотите ещё одну "Бесконечную историю" забацать(кто-нибудь,может,помнит)?
9
14 марта 2009 года
Lerkin
3.0K / / 25.03.2003
Да нормально. Перепалка с Грином - это, так сказать, боевое крещение... :rolleyes:
255
14 марта 2009 года
Dart Bobr
1.4K / / 09.04.2004
Тема веселит. Некоторые высказывания надо будет записать, чтоб не забыть...
23K
14 марта 2009 года
Inc(Dec(i))
61 / / 13.02.2009
Ответ на свой изначальный вопрос я получил, спасибо всем за активное участие в теме)))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог