最近在使用这几个open的时候,常看到别人的代码在打开失败时有的就直接关闭文件了,有的就没有关闭。
现在就来简单说明一下:
记住:在open,fopen,popen 打开失败后,就不必再关闭文件了。下面就概要说明一下原因。
open 使用:
#include//头文件
int open(constchar*pathname,intflags);//原型1
int open(constchar*pathname,intflags,mode_tmode);//原型2
int close(int fd); //关闭文件描述符
返回值:成功则返回文件描述符,否则返回-1 //执行结果
open成功以后会返回一个非0值的文件描述符,这个文件描述符是可以使用close关闭的
open失败会返回一个 fd = ( -1 ),如果close (fd ),没有必要, 因为文件描述符是一个非负整数,所以用close去关闭一个负值,也没多大的意义
2. fopen()函数
fopen函数用于打开文件, 其调用格式为:
FILE *fopen(char *filename, *type);
fopen如果成功的打开一个文件, 函数返回文件指针, 否则返回空指针(NULL)。由此可判断文件打开是否成功。
fclose()函数函数用来关闭一个由fopen()函数打开的文件 , 其调用格式为:
int fclose(FILE *stream);
根据介绍,fopen成功会返回一个文件指针而且不为NULL,这样fclose文件文件指针时不会有问题。
fopen失败后,会返回一个NULL,此时如果在fclose 此fp,会出现段错误。
例:
FILE * fp;
fp = fopen("a.txt", "r");//以只读方式打开,如果文件不存在会返回NULL
if( NULL == fp)
{
printf("open file failed !\n");
//fclose(fp); //此处不能使用fclose,否则会段错误,关闭的是NULL
}
else
{
//do thing
fclose(fp);
}
3、popen使用FIFO管道执行外部程序。
#include
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
popen() 函数作用简介:
用创建管道 的 方式启动一个进程, 并调用 shell. 因为 管道是被定义成单向的, 所以 type 参数 只能定义成 只读或者 只写, 不能是 两者同时, 结果流也相应的 是只读 或者 只写.popen() 函数 的 返回值 是一个普通的标准I/O流, 它只能用 pclose() 函数 来关闭, 而不是 fclose()。
返回值类型同fopen。在打开失败后,就返回NULL,所以也没有必要再去关闭返回的文件指针(NULL)了。
欢迎指出问题,共同学习,共同进步!
阅读(2201) | 评论(0) | 转发(0) |