APUE习题5.x

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/

原文地址:https://www.cnblogs.com/nufangrensheng/p/3506610.html