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. 【渝粤题库】广东开放大学 现代服务学概论 形成性考核 (2)
  2. 【2018新年巨献】像阿里巴巴一样高效工作!(含视频、文章、PDF文件)
  3. MVCWebForm对照学习:文件上传(以图片为例)
  4. openresty安装配置 Ubuntu下
  5. 好好的虚拟机不能用了, 出现无法打开内核设备\\.\Global\vmx86: 系统找不到指定的文件的错误, 以下是网上找到的解决方法,亲测可用...
  6. MySQL乱码的问题
  7. 微信小程序开发资源汇总 awesome-wechat-weapp
  8. Matlab计算器设计
  9. 基于linux的软件测试,基于linux的Web服务器性能测试
  10. 联想服务器的主板型号怎么看,科技知识:联想主板型号怎么看
  11. linux os版本 32或64位查看
  12. matlab:使用4阶龙格库塔方法求解常微分方程组
  13. html效果浮窗效果,jQuery简单实现中间浮窗效果
  14. C++信息学奥赛一本通(T1413:确定进制)
  15. python defaultdict
  16. 一份不悔的爱情 魔兽中那些我们追过的橙色武器
  17. java,判断一个整数是质数还是合数.
  18. DeOldify,这个开源的AI代码可以给你的黑白照片上色
  19. 手机发起PPT课件文档直播实测效果
  20. 【QT】实现贪吃蛇小游戏(附源码)

热门文章

  1. jwt token注销_JWT生成token及过期处理方案
  2. nginx-http-flv-module介绍
  3. 培训报名小程序实战开发
  4. 2022“杭电杯”中国大学生算法设计超级联赛(5)补题
  5. typedef enum与enum的用法
  6. C#【oledbConnection】
  7. cascadia-code字体
  8. JavaScript实现小说阅读插件
  9. 【Kevin三连弹之二】Rust适合用来写linux内核模块吗?
  10. 以工业界的视角看cv