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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • APK签名流程详解

    APK签名流程详解本文最好对照我的APK签名解析示例进行阅读.示例中的关键文件说明:keys-存放签名公私钥的目录signed_logcat.apk-已经使用keys目录中的密钥签名后的apksigned_logcat-signed_logcat.apk解压出来的内容sign.cmd-对apk签名的批处理命令signapk.jar-java版本的apk签名工具

    2022年5月11日
    32
  • RPM安装篇

    RPM安装篇从一般意义上说,软件包的安装其实是文件的拷贝,RPM安装软件包,也无外乎此。但RPM要更进一步、更聪明一些就需要多做些工作了。聪明的安装从一般意义上说,软件包的安装其实是文件的拷贝,即把软件所用的各个文件拷贝到特定目录。RPM安装软件包,无外乎此。但RPM要更进一步,更聪明一些。在安装前,它通常要执行以下操作:1.检查软件包的依赖(Dependency)RPM格式的软件包中可

    2022年5月6日
    41
  • Android开源与干货网站汇总

    Android开源与干货网站汇总

    2021年10月1日
    43
  • eth挖矿软件_PI挖矿

    eth挖矿软件_PI挖矿Gpu矿机使用(文章测试使用的是AMD580显卡,Ethminer0.17.0)先执行ethminer-G–list-devices查看Gpu数量,我的机器是8Gpu,执行命令后1首先启动geth节点   geth–port33333–rpc–rpcapieth–rpcaddr192.168.10.176–rpcport8888conso…

    2022年10月9日
    0
  • 设置PyCharm运行程序时在Run窗口运行,不在Python Console窗口中运行

    设置PyCharm运行程序时在Run窗口运行,不在Python Console窗口中运行最近,我在

    2022年8月28日
    2
  • MySQL1054错误_mysql错误代码1064

    MySQL1054错误_mysql错误代码1064问题解释:Duplicateentry‘…’forkey‘PRIMARY,即插入数据时,要插入数据的主键数据(…)已经存在,不能再重复添加了。例:Duplicateentry‘0’forkey‘PRIMARY是指主键为0的数据已经存在,不能再插入主键值为0的数据了。问题解决:在执行插入操作insert前,可以先执行一遍该主键值的查找操作select,例如:执行插…

    2022年4月19日
    64

发表回复

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

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