open函数返回值为0

open函数返回值为0open函数是我们开发中经常会遇到的,这个函数是对文件设备的打开操作,这个函数会返回一个句柄fd,我们通过这个句柄fd对设备文件读写操作。  我们在对这个fd作判断的时候,经常会用到:    fd=open(filename,O_RDONLY);     If(fd          Printf(“open%serror!\n”,fi

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

        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

 

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

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

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

            close(0);

            fd = open(filenameO_RDONLY);

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

 

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

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HADOOP生态圈以及各组成部分的简介

    HADOOP生态圈以及各组成部分的简介HADOOP生态圈以及各组成部分的简介1各组件简介重点组件:HDFS:分布式文件系统MAPREDUCE:分布式运算程序开发框架HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具HBASE:基于HADOOP的分布式海量数据库ZOOKEEPER:分布式协调服务基础组件Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库Oozie…

    2022年5月21日
    49
  • win10键盘灯怎么开启_windows10怎么开键盘灯光

    win10键盘灯怎么开启_windows10怎么开键盘灯光win10系统,联想拯救者,有时我们需要在昏暗的条件下开灯。快捷键Fn+空格(space)fn:functionn大家可以试一试。

    2025年12月1日
    5
  • 【c#】控制台程序的显示和隐藏「建议收藏」

    【c#】控制台程序的显示和隐藏「建议收藏」【c#】控制台程序的显示和隐藏

    2022年4月25日
    52
  • idea2019激活教程,永久激活,一次性搞定!(必看)

    idea2019激活教程,永久激活,一次性搞定!(必看) 此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 此教程已支持最新2019.2版本 永久激活方法 1.下载jar包 点击链接 网盘链接:pan.baidu.com/……

    2022年3月13日
    82
  • 笔记汇总目录

    笔记汇总目录SpringCloud微服务SpringCloud入门操作手册(Hoxton)RabbitMQRabbitMQRabbitMQ-Springboot整合LuceneSolrLuceneSolr811DockerDockerDocker案例Kubernetes原创Kubernetes原创k8s部署SpringCloud应用分布式事务分布式事务(一)Mysql本地事务和事务隔离级别分布式事务(二)分布式事务方案分布式事务(三)Seata分布式.

    2022年7月27日
    4
  • 常用硬件知识点总结

    常用硬件知识点总结1、GPIO的8种工作模式①浮空输入:一般多用与外部按键输入。IO的电平状态是不确定的,完全由外部输入决定。输入引脚上任何噪声都会改变输入段检测到的电平。②带上拉输入:内接上拉电阻输入,当输入引脚悬空时读到的是1。③带下拉输入:内接下拉电阻输入,当输入引脚悬空时读到的是0。④模拟输入:应用ADC模拟输入⑤推挽输出:推挽电路是两个参数相同的三极管或MOSFET,以推…

    2022年7月22日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号