[收藏]C++ Tips(5)--返回值的检查

/*这一系列文章《C++ Tips》是公司Code Committee专家会推荐工程师看的,感觉很好,拿出来与大家共同提高。并不是知道多少会使人与人产生差别,真正的差别在于你能做到多少。
--coofucoo
*/
对系统调用的返回值进行判断
继续上一条,对于一些系统调用,比如打开文件,经常有这种情况,许多程序员对fopen返回的指针不做任何判断,就直接使用了。然后发现文件的内容怎么也读出不,或是怎么也写不进去。还是判断一下吧:
fp = fopen("log.txt", "a");
if ( fp == NULL ){
    printf("Error: open file error/n");
    return FALSE;
}
其它还有许多,比如:socket返回的socket号,malloc返回的内存等等。我的建议是:只要是函数声明时返回值不是void类型,就请对这些系统调用返回的东进行判断,举一个最常见的函数:close,它是这么定义的:
    int close(int fd);
再看一下它的一些描述:“Not checking the return value of close is a common but nevertheless serious programming error.  It  is  quite possible  that  errors  on a previous write operation are first reported at the final close.  Not checking the return value when closing the file may lead to silent loss of data.  This can especially be observed with NFS and disk quotas.”因为现代的操作系统都启用了延时写技术,在你调用write之后并不一定马上就将数据写入磁盘,所以close的时候有可能此时系统真正向磁盘写入大段数据导致close失败。而你缺认为文件已被关闭。解决的方法是判断close的返回值,失败后稍等一会儿,或是使用其他策略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值