阅读内容

Linux\Unix 系统编程 -- 关于缓冲设置时容易出现的错误

[日期:2008-09-19] 来源:Linux公社  作者:Linux编辑


  以下这段程序是笔者在阅读《Unix环境高级编程(第二版)》时看到的一个例子,感觉非常有说明意义,这种内存控制错误在初学者,甚至是一些老手中都会出现,所以拿出来给大家分享一下,也提醒自己注意。

  这里出现的问题是,当open_data返回时,它所占用的栈空间将被释放用于下一个函数的调用。但是标准I/O库将仍然使用这一块缓冲。混乱必定会导致错误的出现。为了更正这里的问题,我们应该把databuf这个变量声明为全局的,或者静态的,或者extern,或者使用alloc函数分配空间。

/* Incoorect usage of an automatic variable */
#include <stdio.h>

#define DATAFILE "datafile"

FILE * open_data(void) {
FILE *fp;
char databuf[BUFSIZ]; /* setvbuf makes this the stdio buffer */

if ((fp = fopen(DATAFILE, "r")) == NULL)
return (NULL);
if (setvbuf(fp, databuf, _IOLBF, BUFSIZ) != 0)
return (NULL);

return fp; /* error */




相关资讯       linux编程 
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:

L
I
N
U
X


GOOGLE搜索
Google