Impossible is nothing  
  爱过知情重醉过知酒浓   花开花谢终是空   缘份不停留像春风来又走   女人如花花似梦
公告
日历
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
统计
  • 随笔 - 8
  • 文章 - 91
  • 评论 - 16
  • 引用 - 0

导航

常用链接

留言簿(4)

随笔分类(4)

随笔档案(8)

文章分类(77)

文章档案(91)

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
对系统调用的返回值进行判断
继续上一条,对于一些系统调用,比如打开文件,经常有这种情况,许多程序员对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的返回值,失败后稍等一会儿,或是使用其他策略。
posted on 2006-02-26 12:53 笑笑生 阅读(177) 评论(0)  编辑 收藏 引用 所属分类: C++语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


 
Copyright © 笑笑生 Powered by: 博客园 模板提供:沪江博客