API функции или библиотечные
А ты куда-то спешишь?
fopen(),malloc() и т.д. - стандартные функцие языка C - это означает что они работают на любой ОС.
Может быть HeapAlloc() будет работать быстрее чем malloc(), но я сомневаюсь что CreateFile() будет работать быстрее чем fopen().
Могу вам посоветовать чтобы вы старались писать программы на стандартных функциях, тогда ваши коды будут переносимы на Линукс,Уникс,виндовс и т.д.
Но если эти возможности не нужны, то, действительно, лучше использовать что-то более универсальное.
fopen("/dev/ttyS0") или fopen("com1")
Вообще-то немного наоборот:библиотечные функции базируются на WinAPI:)(когда речь идёт о Windows,конечно)
2 kant: Почему fopen будет быстрее CreateFile?Вот уж не думаю…Оболочка для какой-то функции явно не будет работать быстрее неё самой
Напоследок:может,автору вовсе и не надо кроссплатформенность?Спросим у самого автора:)
Есть одно простое правило: если что-то можно и достаточно просто реализовать своими средствами, не зачем прибегать к посторонней помощи.
WinAPI для языка C является внешней сущностью ("сторонней библиотекой"), если нет явной необходимости, то зачем городить огород?
2 kant: Почему fopen будет быстрее CreateFile?Вот уж не думаю…Оболочка для какой-то функции явно не будет работать быстрее неё самой
int main(void)
{
FILE * f = fopen("file.txt","w");
}
Написал вот такую маленькую программу, если то что вы пишете правда то данная программа должна использовать функцию CreateFile(), вот только она этого не делает.
Проверял с диссамблером из программы PE-Explorer,написано что используется функция fopen,библиотека CRTDLL.dll.
int main(void)
{
FILE * f = fopen("file.txt","w");
}
Написал вот такую маленькую программу, если то что вы пишете правда то данная программа должна использовать функцию CreateFile(), вот только она этого не делает.
Проверял с диссамблером из программы PE-Explorer,написано что используется функция fopen,библиотека CRTDLL.dll.
Паровоз следует с остановками. Проедьте до следующей.
Не понял.:confused:
А какую функцию, в свою очередь, вызывает fopen?
Или вы правда считаете, что она умеет напрямую работать с драйвером fat32 или ntfs?
Возможно, пример этот не очень удачен, но наверное стандартные функции не предназначены для такой работы, и это использование проходит из-за конкретной реализации. Хотя подробно не исследовал.
Но в любом случае, при работе с fopen приходится ограничиваться синхронными операциями ввода-вывода, ограничены настройки защиты файла, совместного использования и т.д. Все это я говорю по памяти. Можно подробнее покапаться, если есть недоверие.
Попробуй разобраться, что такое CRTDLL.
CRTDLL - это ещё не "конечная станция"
CRTDLL - это ещё не "конечная станция"
Ага,спасибо.
Нашел я, CRTDLL.dll свою очередь пользуется WinAPI функциями с KERNEL32.dll,и там же находится CreateFile()
Конечно,так и будет!Я ж не утверждал,что она напрямую будет использоваться…Будто нельзя было дальше CRTDLL заглянуть.Она ж 145 кб весит!Куда уж там всем функциям ввода/вывода поместиться?:)
Да и не дизассемблером это надо проверять,а хотя бы Dependency walker'ом
Да и не дизассемблером это надо проверять,а хотя бы Dependency walker'ом
А чем тебе не нравиться результат который возвращает диссамблер ?
Просто DW для этих случае подходит лучше.Открой ты им файл в самом начале,дерево зависимостей сразу б показало тебе,как ты неправ насчёт DLL'ек:)
Для языка Ц все функции являются внешней сущностью. Другое дело, поставляются они в комплекте с компилятором или нет.
Но в любом случае, при работе с fopen приходится ограничиваться синхронными операциями ввода-вывода, ограничены настройки защиты файла, совместного использования и т.д. Все это я говорю по памяти. Можно подробнее покапаться, если есть недоверие.
Это не особенности функции fopen\CreateFile, а особенности ОС, как DOS, так и UNIX - работа со стандартными устройствами как с файлами. Хотите больше возможностей, чем простой ввод-вывод без контроля - нужно использовать специально предназначенные для этого функции, которые есть как в DOS\win, так и в UNIX.
Настройте компилятор, чтобы используемые функции прилинковывались к программе, а не брались из библиотек. Это поможет нормально разобраться с импортом и прибавит переносимости - не нужно будет таскать за собой кучу библиотек с сишными функциями.
Для языка Ц все функции являются внешней сущностью. Другое дело, поставляются они в комплекте с компилятором или нет.
Глупость. CRT является частью языка.
Хотя, может в языке Ц это и не так, но я такого языка не знаю. :)
Это не особенности функции fopen\CreateFile, а особенности ОС, как DOS, так и UNIX - работа со стандартными устройствами как с файлами. Хотите больше возможностей, чем простой ввод-вывод без контроля - нужно использовать специально предназначенные для этого функции, которые есть как в DOS\win, так и в UNIX.
Непонятно, что ты этим хотел сказать...
При чем тут DOS?
Разве это не особенность ф-ции fread, что она не предназначена для асинхронных операций, хоть и оборачивает ReadFile, который предназначен для асинхронных операций.
При чем тут особенность ОС?
Настройте компилятор, чтобы используемые функции прилинковывались к программе, а не брались из библиотек.
Настройте компилятор? Сам то понял, что сказал?
А какое отношение имеет компилятор к линковке?
И что значит "прилинковывались к программе, а не брались из библиотек" ? :)
Наверное ты хотел сказать: "чтоб библиотеки прилинковывались статически, а не динамически" ?
Но библиотеки то от этого никуда не денутся.
И какое это имеет отношение к фразе Kogrom ?
Если fopen будет привязан статически, появится возможность использовать его для динамических операций?
Это поможет нормально разобраться с импортом
Кому поможет?
У кого-то здесь проблемы с импортом? Обратитесь в таможню, там Вам помогут.
и прибавит переносимости - не нужно будет таскать за собой кучу библиотек с сишными функциями.
Обычно под "переносимостью" подразумевается возможность компиляции программы под разные платформы.
Хотя, может в языке Ц это и не так, но я такого языка не знаю. :)
Частью устоявшегося синтаксиса языка - да. Но от этого они не стали его обязательной частью и принципиальных отличий между функциями ANSI C и другими нет. Мы рассуждали о том, что функции внешние, а не о стандартах на язык. Это разные вещи.
При чем тут DOS?
Что сказал, то и хотел. DOS при том, что принципы организации такой работы с устройствами в винде унаследованы от неё. Хотя вначале всё равно была UNIX :)
При чем тут особенность ОС?
Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.
А какое отношение имеет компилятор к линковке?
Если вы такой дотошный, то нужно настроить компоновщик. Однако автор меня скорее всего не понял бы.
Наверное ты хотел сказать: "чтоб библиотеки прилинковывались статически, а не динамически" ?
Да, это я и хотел сказать, выразившись простым языком.
И какое это имеет отношение к фразе Kogrom ?
Если fopen будет привязан статически, появится возможность использовать его для динамических операций?
Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.
У кого-то здесь проблемы с импортом? Обратитесь в таможню, там Вам помогут.
Если вам не знакомо слово импорт применительно к написанию программ под ОС windows, обратитесь к справочнику программиста или в раздел для начинающих. Свою мысль я разъяснил выше.
Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.
Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.
Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.
Если вам не знакомо слово импорт применительно к написанию программ под ОС windows, обратитесь к справочнику программиста или в раздел для начинающих. Свою мысль я разъяснил выше
Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.
я плакаль.
Нельзя ли без ссылок на "разъяснил выше", простым человеческим языком пояснить что хотелось сказать? А то меня терзают смутные сомнения.
Частью устоявшегося синтаксиса языка - да. Но от этого они не стали его обязательной частью и принципиальных отличий между функциями ANSI C и другими нет. Мы рассуждали о том, что функции внешние, а не о стандартах на язык. Это разные вещи.
Тогда что по твоему такое язык программирования C? Получается, только синтаксис.
Принципиальные отличия между функциями ANSI C и другими ЕСТЬ. Первые являются стандартными. Т.е. независимо от того, где исполняется программа написанная на C, "родные" функции должны работать так, как указано в стандарте. Другие могут работать так, как захочет разработчик этих функций.
А что ты подразумеваешь под "внешними" ?
Это особенность построения ОС, согласно которой к потоковым устройствам возможны обращения как к файлам, с теми же свойствами, в частности синхронностью. Однако в винде (а может быть и в UNIX) возможны и асинхронные операции с файлами и, соответственно, с устройствами, согласно концепции этих ОС.
Опять не понимаю, что ты пытаешься доказать.
Функции Win API (как пример ОС API) могут работать и так и этак, а fread работает ТОЛЬКО так. Разве это не особенность fread? При чем тут особенность ОС?
Кроме того, можно обучить fread работать как с потоком (по другому она не умеет) с устройствами совсем не потокового рода.
При чем тут влияние ОС на fread не понимаю...
Если fopen будет привязан статически, появится возможность разобраться с использованием программой функций ОС, взглянув на таблицу импорта и избавит от рыскания по динамически подключаемым библиотекам с инструментом в руках.
Могу разочаровать, даже при статической линковке не всегда есть такая возможность разобраться по IAT.
Да и зачем?
Могу уточнить, что я имел в виду переносимость исполняемого файла программы между машинами, работающими под управлением ОС windows, на машины, где по нелепому недоразумению не установлена среда разработки та же, что и у автора вместе с нужными программе библиотеками.
Небольшое отступление: на другой машине не обязательно должна быть установлена среда разработки, достаточно будет установить CRT из спец. поставляемых пакетов.
По определению, язык - это набор символов, их значений и правил. Сюда можно отнести правила записи программы. Но названия функций под это определение по-моему не подходят. Скорее можно провести аналогию с жаргоном в человеческом языке.
Под внешними функциями я подразумеваю то же, что и ты
Если конечно ты не имел в виду динамически подгружаемые. Хотя и типовые функции языка могут быть такими.
Я лишь хочу сказать, что первична такая особенность ОС, а особенности функций ANSI C унаследованы из особенностей ОС. Функция перенаправляет свои параметры функции ОС, кардинально их не меняя.
Только если драйвер устройства реализует потоковые функции. и сопоставит устройству файл. Физически устройство разумеется может быть каким угодно, в этом и состоит функция драйвера.
Да и зачем?
Автор хотел узнать, какие функции системы вызываются его программой. Ради этого всё и затевалось. Статическая же линковка в значительной мере упростит его задачу. Думаю в программе автора таких проблем не будет. Там скорее всего не используются ни загрузка библиотек самой программой, ни функции COM.
Для этого эти пакеты надо найти и скачать, что возможно не всегда, создаёт неудобства и к тому же закачиваются не только нужные функции, а много лишнего. Автору же программы достаточно поставить пару галочек в настройках, чтобы нужные функции прилинковались к программе.
Думаю,он удовлетворил свой интерес,а вам советую завязывать с перепалкой–спать пора:)
Вы тут хотите ещё одну "Бесконечную историю" забацать(кто-нибудь,может,помнит)?