C中的I / O方法

时间:2010-07-07 11:16:36

标签: c performance

我正在寻找从stdin / stdout读取/写入数据的各种方法。目前我了解scanf / printf,getchar / putchar和gets / puts。有没有其他方法可以做到这一点?我也很有兴趣知道哪一个在记忆和空间方面最有效。

先谢谢

3 个答案:

答案 0 :(得分:3)

fgets() 
fputs()
read()
write()

其他人可以在此处找到详细信息:http://www.cplusplus.com/reference/clibrary/cstdio/

根据您的时间问题,请看一下:http://en.wikipedia.org/wiki/I/O_bound

答案 1 :(得分:2)

无论您喜欢哪种方式读取数据,Stdio的设计都非常高效。如果你需要逐个字符的读写操作,它们通常会扩展为只访问缓冲区的宏,除非它是满/空的。对于逐行文字io,请使用puts / fputsfgets。 (但从不使用gets,因为无法控制它将读取多少字节!)printf系列(例如fprintf)当然非常有用对于文本,因为它允许您在写入之前跳过在内存中构建临时缓冲区(因此可以避免考虑所有内存分配,溢出等问题)。 fscanf往往没那么有用,但主要是因为它很难使用。如果您正好学习fscanf的文档并了解如何使用%[%n和数字说明符,那么它可能非常强大!

对于大块文本(例如,将整个文件加载到内存中)或二进制数据,您还可以使用freadfwrite函数。您应该始终为size参数传递1,并为count参数读取/写入的字节数;否则,无法从返回值中判断出成功读取或写入了多少。

如果您使用的是类似POSIX的系统(几乎任何东西),您还可以使用较低级别的io函数openreadwrite等。 NOT 是C标准的一部分,但是POSIX的一部分,非POSIX系统通常提供相同的功能,但行为可能略有不同(例如,文件描述符可能没有顺序编号0,1 ,2,......就像POSIX需要的那样。)

答案 2 :(得分:0)

如果您正在寻找立即模式类型的东西,请不要忘记Curses(更适用于* NIX方面,但也适用于Windows)