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.

 

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)


相关推荐

  • java百分比或带百分号的数字转成double或Bigdecimal格式[通俗易懂]

    java百分比或带百分号的数字转成double或Bigdecimal格式[通俗易懂]java百分比或带百分号的数字转成double或Bigdecimal格式

  • 简单网页计算器代码大全_用web制作简单计算器

    简单网页计算器代码大全_用web制作简单计算器注:本人为初学者,欢迎各位大神指教简单计算器实现效果:HTML代码counter.html计算器

    2022年10月13日
  • Quartz使用之:远程job的执行

    Quartz使用之:远程job的执行quartz提供了远程执行job的功能。本篇文章通过具体的例子来演示这一功能。第一步:建立以下几个文件:1.RemoteJob.java(远程要执行的任务,实现了Job接口)。2.RemoteClientLab.java(客户端程序,远程告诉Scheduler去执行一个任务)。3.client.properties(客户端属性文件)4.Rem

  • 2021年顶级编程语言名单出炉,SQL位居榜首,Java、Python紧随其后

    2021年顶级编程语言名单出炉,SQL位居榜首,Java、Python紧随其后不同的编程语言会对我们的求职产生相当大的影响,但是目前哪种编程语言最受公司欢迎呢?EmsiBurningGlass收集并分析了数百万个招聘信息,qizhon给SQL位居榜首,Java位列第二,Python排名第三。

  • vba 编程学习

    vba 编程学习最近公司管理人员需要给excle文章加入许多自动化功能,要求个人学习vba编程,经过几天学习总结了一下:1.打开Microsoftvisualbase界面      (1)在Excle选项中选择”开发工具选项“加入显示编辑窗口按钮  (2) 快捷键如下:Alt+F11

  • Java基础:volatile详解

    Java基础:volatile详解Java基础:volatile1、volatile保证可见性1.1、JMM模型的引入1.2、volatile保证可见性的代码验证1.2.1、无可见性代码验证1.2.1、volatile保证可见性验证2、volatile不保证原子性问:请谈谈你对volatile的理解?答:volatile是Java虚拟机提供的轻量级的同步机制,它有3个特性:1)保证可见性2)不保证原子性3)禁止指令重排刚学完java基础,如果有人问你什么是volatile?它有什么作用的话,相信一定非常懵逼…可能看了答案,也完

发表回复

您的电子邮箱地址不会被公开。

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