open函数返回值为0
来源:互联网 发布:阿迪达斯淘宝 编辑:程序博客网 时间:2024/06/16 17:04
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.
- open函数返回值为0
- OPEN()函数及返回值
- open函数参数及返回值
- open函数参数及返回值
- open函数参数及返回值
- open函数参数以及返回值详解
- open函数参数及返回值
- open函数参数及返回值
- 函数返回值为数组
- 返回值为函数指针
- 函数返回值为数组
- 函数返回值为数组
- 函数返回值为数组
- 返回值类型为unsigned long long的函数永远返回为0的问题解决
- 返回值为函数指针的函数
- 返回值为函数指针函数
- Linux系统函数open和close(02)---open函数的返回值
- open函数的返回值可能是0,1,2这三个中的任意一个吗?
- Codeforces #430(div2) A. Kirill And The Game
- react.js框架Redux:初步认识
- java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
- SDWebImage取缓存图像
- Tensorflow安装,mnist入门
- open函数返回值为0
- PAT (Basic Level) Practise (中文) 1019. 数字黑洞 (20)
- JS+ajax+Json
- java移位运算
- MyBatis整合Spring理论
- jquery优化性能方法
- java 操作json数据 fastjson jackson
- 2017夏天之哪凉快去哪里 之七
- 关卡设计快速入门_7. 自己来!