5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时出错,解释问题所在?
#include <stdio.h> int main( void ) { char c; while ( ( c = getchar() ) != EOF ) putchar( c ); }
答:这是一个比较常见的错误。 getc以及getchar的返回值是整型,而不是字符型 。由于EOF经常定义为-1,那么如果系统使用的是有符号的字符类型,程序还可以正常工作。但如果使用的是无符号字符类型,那么返回的EOF被保存到字符c后将不再是-1,所以,程序会进入死循环。
5.6 对标准I/O流如何使用fsync函数?
答:使用方法为:先调用fflush后调用fsync,fsync的参数由fileno函数获得。如果不调用fflush,所有的数据仍然在内存缓冲区中,此时调用fsync将没有任何效果。
本篇博文内容摘自《UNIX环境高级编程》(第二版)。关于本书的更多内容可参考: http://www.apuebook.com/ 。