Методы ввода / вывода в C - PullRequest
5 голосов
/ 07 июля 2010

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

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

Ответы [ 3 ]

3 голосов
/ 07 июля 2010
fgets() 
fputs()
read()
write()

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

По вашему вопросу времени посмотрите на это: http://en.wikipedia.org/wiki/I/O_bound

2 голосов
/ 07 июля 2010

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

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

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

0 голосов
/ 07 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...