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相关推荐

  1. 在Linux-C中使用read函数返回值为0的问题

    在Ubuntu中时使用read函数读取write函数写入到文件的数据时,发现读取到的内容为空,之后查看read函数的返回值发现也为空 经过思考后发送是在使用write函数之后,文件内部的文件指针指向文 ...

  2. main函数返回值return 0

    1. C语言中 在 C89(C语言的早期标准)中,main() 是可以接受void返回值的.Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C pro ...

  3. strcmp函数返回值是0,一直动用错了

    原型:extern int strcmp(const char *s1,const char * s2); 用法:#include < string.h > 功能:比较字符串s1和s2. ...

  4. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  5. c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...

    [单选题]在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值 更多相关问题 下列关于IMOECDIS性能标 ...

  6. 神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。

    cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0的细节探究. import cv2 import matplotlib.pyplot as plt import numpy a ...

  7. C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是

    原题: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0.在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是不是 ...

  8. C语言中的函数返回值、return用法、return 0详解

    1.函数返回值 定义:函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过return语句返回. 没有返回值的函数为空类型,用void表示.一旦函数的返回值类型被定义为 voi ...

  9. C++函数返回值介绍(含return 0 与 return 1 与 return -1介绍)

    很多人在学习C++ 的过程中应该会留意到返回值的问题,特别是习惯用:int main()  的猿类同伴们.我们需要在函数结尾写个返回值. int main(){return 0; } 接下来就给大家简 ...

最新文章

  1. Spring Aop的应用
  2. 2019 ACM - ICPC 全国邀请赛(南昌) 题解(9 / 12)
  3. 用deepfake拍电影可以安排了:迪士尼发布首个百万像素高分辨率换脸算法
  4. Hadoop源代码eclipse编译指南
  5. android内部通信handler
  6. python通过DictReader实现两个csv文件的映射查找lookup之代码详解
  7. 阿里云监控插件安装 | 非阿里云服务器安装指南
  8. resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
  9. Error Message - 400 File is not contained in a resource root
  10. java 参数传值的练习题及答案_java方法参数传递面试题三则
  11. c# vs2010 excel 上传oracle数据
  12. 格灵深瞳开源全球最大最干净的人脸识别数据集:Glint360K
  13. java解析XML Node与Element的区别
  14. OpenNLP-引言
  15. Lan Xiang's Square nyoj 1099(已经四边形四点坐标 如何判断正方形)
  16. 级数ex展开_方亚斌---用ex的幂级数展开式编拟高考题
  17. ipad上怎么打开html文件,ipad HTML文件怎么打开
  18. 中国足球有救了,因为这两个人已经成为中超新时代教练的一股清流
  19. rtl8188etv无线网卡驱动移植
  20. OGG抽取进程异常一例

热门文章

  1. Hook机制之动态代理
  2. ORA-01109:数据库未打开
  3. Z-Statk协调器 路由器 终端的确定---Simple例程(一)
  4. Linux 守门员:防火墙iptables
  5. 深圳所有狗植入芯片,有助于减少流浪狗,芯片至少可以使用15年
  6. [Unity Mirror] 传输
  7. Error while building/deploying project untitled (kit: Desktop Qt 5.5.1 MinGW 32bit)
  8. flutter-Button
  9. Windows下VS直接下载OpenGL库
  10. 大神廖雪峰的web全栈学习体系图,拿走不谢!