前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >open函数返回值为0

open函数返回值为0

作者头像
全栈程序员站长
发布2022-09-01 14:25:24
2.7K0
发布2022-09-01 14:25:24
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

open函数是我们开发中经常会遇到的,这个函数是对文件设备的打开操作,这个函数会返回一个句柄fd,我们通过这个句柄fd对设备文件读写操作。

我们在对这个fd作判断的时候,经常会用到:

fd = open(filename, O_RDONLY);

If (fd <= 0) {

Printf(“open %s error!\n”, filename)

return;;

}

正是这样的判断,前不久导致了项目上面的一个问题,我们先来看看open函数的原型:

int open(constchar*pathname,intflags);

int open(constchar*pathname,intflags,mode_tmode);

函数参数:

pathname:打开文件的路径名

flags:用来控制打开文件的模式

mode:用来设置创建文件的权限(rwx)。当flags中带有O_CREAT时才有效。

返回值:

调用成功时返回一个文件描述符fd

调用失败时返回-1,并修改errno

正确的判断应该是 if(fd < 0),那我们什么时候会fd=0呢,如果fd=0,那么已经正常打开了,但是我们判断了打开错误了。

open函数返回的文件描述符fd一定是未使用的最小的文件描述符,那么如果0没有使用,那么我们open的时候,首先就会获取到fd=0的情况。默认情况下,0,1,2这三个句柄对应的是标准输入,标准输出,标准错误,系统进程默认会打开0,1,2这三个文件描述符,而且指向了键盘和显示器的设备文件。所以通常我们open的返回值是从3开始的。

如果我们在open之前,close其中的任何一个,则open的时候,则会用到close的最小的值:

close(0);

fd = open(filename,O_RDONLY);

printf(“fd = %d\n”, fd);

则可以发现我们就可以open的时候,返回了0的fd.

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141561.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档