- 论坛徽章:
- 0
|
原帖由 alexhappy 于 2008-12-19 18:10 发表
事实上,如果fp不等于空,你无法判断它指的值是否是有效值。。。。
不过或许你可以试试这个办法,用fileno来返回一个文件描述符,如果能成功,那么fp肯定是有效的,如果出错,那就去判断errno
试了,我把程序改成了
#include<stdio.h>
#include<stdlib.h>
int main(){
int ret;
FILE* pf,*pfx;
pfx=(FILE*)0x000033;
pf=fopen("f.c","r");
if(pf==NULL){
printf("fopen fail\n");
exit(1);
}
ret=fileno(pf);
printf("before close,fileno=%d\n",ret);
fclose(pf);
ret=fileno(pf);
printf("after close,fileno=%d\n",ret);
ret=fileno(pfx);
printf("fileno=%d\n",ret);
...
输出
> ./a.out
before close,fileno=3
after close,fileno=3
Segmentation fault (core dumped)
不行,fileno不能判断pf是否被fclose()了。谢谢! |
|