Методы ввода-вывода в C

Я ищу различные способы читать/писать данные из stdin/stdout. В настоящее время я знаю о scanf/printf, getchar/putchar, и получает/помещает. Есть ли какие-либо другие способы сделать это? Также я интересен в знании этого, какой является самым эффективным с точки зрения Памяти и Пространства.

Заранее спасибо

5
задан Ravi Gupta 8 July 2010 в 05:31
поделиться

3 ответа

Stdio разработан, чтобы быть достаточно эффективным независимо от того, каким способом вы предпочитаете читать данные. Если вам нужно выполнять посимвольное чтение и запись, они обычно расширяются до макросов, которые просто обращаются к буферу, за исключением случаев, когда он полон / пуст. Для построчного текста io используйте put / fputs и fgets . (Но НИКОГДА не используйте , чтобы получить , потому что нет способа контролировать, сколько байтов он будет читать!) Семейство printf (например, fprintf ) конечно, чрезвычайно полезен для текста, потому что он позволяет вам пропустить создание временного буфера в памяти перед записью (и, таким образом, позволяет вам не думать обо всех проблемах выделения памяти, переполнения и т. д.). fscanf , как правило, гораздо менее полезен, но в основном потому, что его сложно использовать.Если вы хорошо изучите документацию для fscanf и научитесь использовать % [, % n и числовые спецификаторы, это может быть очень мощным!

Для больших блоков текста (например, загрузка всего файла в память) или двоичных данных вы также можете использовать функции fread и fwrite . Вы всегда должны передавать 1 для аргумента размера и количество байтов для чтения / записи для аргумента счетчика; иначе по возвращаемому значению невозможно определить, сколько было успешно прочитано или записано.

Если вы используете систему, достаточно похожую на POSIX (почти что угодно), вы также можете использовать функции io нижнего уровня open , read , write и т. Д. Это НЕ часть стандарта C, а часть POSIX, а системы, не относящиеся к POSIX, обычно предоставляют те же функции, но, возможно, с немного другим поведением (например, файловые дескрипторы могут не быть пронумерованные последовательно 0,1,2, ... как того требует POSIX).

2
ответ дан 14 December 2019 в 18:55
поделиться
fgets() 
fputs()
read()
write()

И другие, подробности можно найти здесь: http://www.cplusplus.com/reference/clibrary/cstdio/

Что касается вашего вопроса о времени, взгляните на это: http://en.wikipedia.org/wiki/I/O_bound

3
ответ дан 14 December 2019 в 18:55
поделиться

Если вам нужны вещи типа immediate-mode, не забудьте о Curses (больше применим на стороне *NIX, но также доступен на Windows)

0
ответ дан 14 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: