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


相关推荐

  • 图像处理——Canny算子

    图像处理——Canny算子首先感谢以下两位的渊博知识:(1)爱鱼     https://www.cnblogs.com/mightycode/p/6394810.html(2)mitutao  https://www.cnblogs.com/love6tao/p/5152020.html图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知道微分运算是求信号的变化率,具有加

    2022年5月30日
    49
  • Git克隆远端代码到本地「建议收藏」

    1、在桌面上点击鼠标右键,找到clone选项,出现其中URL是你要访问的地址,directory为文件保存的路径。点击OK2、桌面上会生成一个文件夹3、在此文件夹中,点击鼠标右键,找到GitBashHere,进入到如下页面输入命令第一:gitconfig–globaluser.name“zjut_wzc”第二:gitconfig–globaluser.em…

    2022年4月7日
    163
  • java oracle分页查询语句_oracle 分页语句

    java oracle分页查询语句_oracle 分页语句通过Debug调试,发现第一页查询到的数据没有问题,第二页时,查不到数据!第一页时,控制台打印的sql语句:SELECTOBJ_NAME,OBJ_ATTRIBUTE_NAME,ATTRIBUTE_TYPE,DES,STS,PRIORITYFROM(SELECTm.*,rownumrow_idFROM(SELECTOBJ_NAME,OBJ_ATTRIBUTE_NAME,ATT…

    2022年5月28日
    35
  • MySQL复制

    复制复制是从一个MySQL服务器(master)将数据拷贝到另外一台或多台MySQL服务器(slaves)的过程.复制是异步进行的–slaves服务器不需要持续地保持连接来接收master的数据.

    2021年12月25日
    44
  • Pycharm及python安装详细教程

    Pycharm及python安装详细教程首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载。2、下载完成后如下图所示3、双击exe文件进行安装,如下图,并按照圈中区域进行设置,切记要勾选打钩的框,然后再点击Customizeinstall

    2022年4月26日
    64
  • Java——迭代器iterator详解

    Java——迭代器iterator详解一 Iterator 的 API nbsp nbsp nbsp 关于 Iterator 主要有三个方法 hasNext next remove nbsp nbsp nbsp hasNext 没有指针下移操作 只是判断是否存在下一个元素 nbsp nbsp nbsp next 指针下移 返回该指针所指向的元素 nbsp nbsp nbsp remove 删除当前指针所指向的元素 一般和 next 方法一起用 这时候的作用就是删除 next 方法返回的元素 nbsp 二

    2025年10月6日
    4

发表回复

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

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