摘要:
5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时出错,解释问题所在?#include int main( void ){ char c; while( ( c = getchar() ) != EOF ) putchar( c );}答:这是一个比较常见的错误。getc以及getchar的返回值是整型,而不是字符型。由于EOF经常定义为-1,那么如果系统使用的是有符号的字符类型,程序还可以正常工作。但如果使用的是无符号字符类型,那么返回的EOF被保存到字符c后将不再是-1,所以,程序会进入死循环。5.6 对标准I/O流如何使用fsync函数?答:... 阅读全文
摘要:
标准I/O并不完善。标准I/O库的一个不足之处是效率不高,这与它需要复制的数据量有关。当使用每次一行函数fgets和fputs时,通常需要复制两次数据:一次是在内核和标准I/O缓冲之间(当调用read和write时),第二次是在标准I/O缓冲区和用户程序中的行缓冲区之间。替代版本fio:快速I/O库则避免了这一点,其方法是使读一行的函数返回指向该行的指针,而不是将该行复制到另一个缓冲区中。由于执行了这种更改,grep(1)实用程序的速度增加了两倍。替代版本sfio:这一软件包在速度上与fio相近,通常快于标准I/O库。sfio也提供了一些其他标准I/O库所没有的新特征:推广了I/O流,使其不仅 阅读全文
摘要:
ISO C标准I/O库提供了两个函数以帮助创建临时文件。#include char *tmpnam( char *ptr );返回值:指向唯一路径名的指针FILE *tmpfile( void );返回值:若成功则返回文件指针,若出错则返回NULL若ptr是NULL,则所产生的路径名存放在一个静态区中,指向该静态区的指针作为函数值返回。下一次调用tmpnam时,会重写该静态区(这意味着,如果我们调用此函数多次,而且想保存路径名,则我们应该保存该路径名的副本,而不是指针的副本)。如若ptr不是NULL,则认为它指向长度至少是L_tmpnam个字符的数组(常量L_tmpnam定义在头文件中)。所产 阅读全文