首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在我关闭我的文件描述符并想回显一些文本后,我会有错误的文件描述符?

在关闭文件描述符后,如果尝试回显文本时出现错误的文件描述符,可能是因为在关闭文件描述符之后,尝试使用已关闭的文件描述符进行操作导致的。

文件描述符是操作系统为了管理文件而分配的一个整数,它是对文件的引用。当我们打开一个文件时,操作系统会为该文件分配一个文件描述符,并将其返回给我们。在使用完文件后,我们应该及时关闭文件描述符,以释放系统资源。

如果在关闭文件描述符后,仍然尝试使用该文件描述符进行操作,就会出现错误的文件描述符。这是因为关闭文件描述符后,操作系统会将其标记为无效,再次使用该文件描述符进行操作时,操作系统会检测到该文件描述符无效,并返回错误。

为避免出现错误的文件描述符,我们应该在关闭文件描述符后,避免再次使用该文件描述符进行操作。可以通过检查文件描述符的有效性来避免错误的文件描述符。在使用文件描述符进行操作之前,可以使用系统调用(如fcntl函数)来检查文件描述符的有效性,如果文件描述符无效,则不进行操作。

总结起来,关闭文件描述符后,应该避免再次使用该文件描述符进行操作,以免出现错误的文件描述符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 完美诠释高内聚概念 IO 流 API 体系结构设计

解释器会从 d 盘根目录下查找 guoke.txt 文件 描述符: 使用 open( ) 函数打开一个文件,python 解释器系统会为此文件指定一个唯一数字标识符。...功能 file = open(2, "w") file.write("you are welcome!") #输出文字会以红色亮 2:表示标准错误输出设备(显示器)描述符。...如果没有指定 buffering 参数,则会提供默认缓冲策略: 二进制文件使用固定大小缓冲块。 许多系统上,缓冲区长度通常为 4096 或 8192 字节。 0: 二进制模式下关闭缓冲。...当 open file1 文件时设置为 closefd=False ,则当 file1 文件关闭,file 文件将保持打开状态。...With you just I don ''' 这里一个细节要注意: 第一次读取完所有文件内容,读取位置已经移到了文件尾部。继续读取时是不能读到数据

53410

嵌入式Linux:文件IO和标准IO库

文件描述符直接与操作系统文件表项相关联,是操作系统提供抽象。 举例来说,假设我们一个C语言程序,打开了一个名为“example.txt”文本文件进行读取。...最后,close函数关闭文件释放对应文件描述符。 1.2、open打开文件 Linux系统中,操作文件需要先打开它以获取文件描述符,然后进行读写或其他操作,最后关闭文件。...Linux系统中,文件描述符是有限资源,因此不再需要使用文件时,应该及时关闭,以释放资源避免资源泄漏。...许多程序都依赖于这一特性,因此没有式地使用 close 函数来关闭文件。 然而,关闭不再需要文件描述符通常是良好编程习惯。...文件读取操作完成,我们使用 fclose() 函数关闭文件。如果关闭文件失败,则会打印一条错误消息退出程序。

7300

SHELL(bash)脚本编程三:重定向

<&word #复制输入文件描述符 [n]>&word #复制输出文件描述符 这里word扩展值必须为数字,表示复制此文件描述符到n,如果word扩展结果不是文件描述符,就会出现重定向错误...如果word值为-,则表示关闭文件描述符n。 [n]>&word这里一个特殊情况:如果n省略且word结果不是数字,则表示重定向标准错误和标准输出(如前所述)。.../bin/bash #打开输入文件描述符3,关联文件file exec 3<file #先将文件描述符复制给标准输入,cat命令从标准输入读取到文件file内容 cat <&3 #关闭文件描述符3.../stderr #转移标准输出到3号描述符关闭原来1号文件描述符。 exec 1>&3- #转移标准错误到4号描述符关闭原来2号文件描述符。 exec 2>&4- #命令标准输出将写入文件....IP日志文件access.log出现次数 grep -c $IP access.log >>result.txt echo #命令运行结束仍写入一个空行至文件描述符

1.6K30

Python open函数详解「建议收藏」

open函数八个参数,如下。 file:文件路径或文件描述符。如为文件路径则是str类型,如是文件描述符,则是一个非负整数。文件描述符使用较少,通常情况下都传入文件路径。...这里文件描述符应拓展理解为Unix、Linux系统文件描述符和Windows系统句柄。可以简单理解为,Unix、Linux系统下叫文件描述符Windows系统下叫句柄。...打开或新建文件时,操作系统内核会返回一个非负整数,可以用来访问指定文件,这个非负整数就是文件描述符Python中可以使用os模块open函数获取其文件描述符。下面是一个例子。...例如rt、r+,实际都是基于r模式变种,与单纯r模式相比一些功能上改变。w、a、x也是同理。 可以看到,如果是变种,第二个字符也不是随便取,只能是t或b或+。先说t和b。...文本编码很多,常用utf-8、ascii、gbk等。

1.4K20

【Linux】vscode使用 | 进程间通信(简单概括)

vscode创建文件运行程序 打开文件夹即可打开在Linux下自己用户家目录 ---- 需要注意是当打开文件,还需再次输入密码 ---- 创建一个新文件命名为test.c ,此时出现一个黑点...简单举例 who 查看当前用户哪一个处于登录状态 ---- wc 统计文本多少行命令 who | wc -l 统计当前正在登录用户个数 ---- who进程 以写方式打开文件...新创建文件被打开时,自己缓冲区,它是由操作系统提供纯纯内存文件,不需要将自己内容刷新到磁盘中 , 以读方式和写方式分别打开同一个文件 2....,父进程进行读取,关闭子进程对应读端,以及父进程写端 此时就可以正常通信了 为什么把读写都打开,只打开读或者写不可以吗?...pipefd[1]为写端 用close来关闭文件描述符 所以关闭子进程读端 ,关闭父进程写端 将子进程变化数据导给父进程 ---- 把namestr 字符串内容与 计数器 cnt 以及pid值

78340

Linux:基础IO(一.C语言文件接口与系统调用、默认打开文件流、详解文件描述符与dup2系统调用)

下面将详细讲解它们作用和用法: fopen() :该函数用于打开一个文件返回一个指向 FILE 结构体指针,该指针用于后续文件操作。...,不会覆盖而是追加 使用 >> 符号进行输出重定向时,会以追加模式打开文件,新内容会被追加到文件末尾而不会清空原有内容 3.三个默认打开文件标准C库中,三个默认打开文件流,它们分别是...这三个文件流在程序启动时会自动打开,不需要式地打开或关闭 stdin、stdout 和 stderr 是标准C库中定义全局变量,它们分别代表标准输入流、标准输出流和标准错误流。...文件创建屏蔽字是一个权限掩码,用于确定新建文件默认权限。创建新文件时,系统会根据进程文件创建屏蔽字来屏蔽一些权限位,以确保新建文件不会拥有过于宽松权限。...当你完成对文件操作,应该使用 close() 函数来关闭它,以释放系统资源。

15910

【Linux】 基础IO——文件(下)

文件描述符为什么从3开始使用?...内存把数据写到显示器上,属于写入过程,读取是从键盘中读取,键盘输入,操作系统把输入数据回到显示器上了,所以显示器只能负责打印 不同硬件所对应方法是完全不一样,打开键盘时,操作系统内部会创建...重定向本质 关闭文件描述符0,发现从0开始可以被输出了 ---- 关闭文件描述符0和2,发现0和2都可以被使用了 ---- 进程中,文件描述符分配规则:文件描述符表中,最小,没有被使用数组元素分配给新文件...输出重定向 若不关闭文件描述符1,当前printf打印结果显示到显示器上面 ---- 关闭文件描述符1,再打开新文件log.txt ---- 此时运行可执行程序没有显示出you can see...,这叫做输入重定向 追加重定向 关闭文件描述符1,导致printf不会打印显示器上,而是追加到log.txt文件中 运行可执行程序,无显示,都追加到log.txt文件中 ---- 重定向函数

2.1K30

Linux基础IO【II】真的很详细

调用close传入参数。 调用write,read函数第一个参数。 可见,文件描述符对我们进行文件操作多么重要。文件描述符就像一个人身份证,一个进程中具有唯一性。...文件描述符2(STDERR_FILENO):它是标准错误文件描述符,通常与进程标准错误流(stderr)相关联。它用于输出错误消息、警告和异常信息到终端或控制台。...与标准输出不同,标准错误通常用于输出与程序执行相关错误和调试信息。 这些文件描述符进程创建时自动打开,并且可以程序运行期间使用。...这是因为我们将0号文件描述符关闭,0号文件描述符就不指向标准输入流了。但是当使用输入函数输入时,他们仍然会向0号中输入,但0号已经不指向输入流了,所以就无法完成输入。...文件描述符为什么就是数组下标呢? 如何理解键盘,显示器也是文件

4810

上线 5 分钟,网站就炸了!

为什么会有 500 错误? 收到大家反馈错误马上就去服务器查看 nginx error 日志了,发现频繁报错了这个错误:“Too many open files”。...很快就知道是文件描述符受限而导致 nginx 频繁报这个错误,每一个 TCP 连接都会占用一个文件描述符,当时发文不到 10 分钟,文章阅读就已经 1000 多了,瞬间一下子 1000 多个请求过来,...调大nginx工作进程最大描述符,nginx error 日志就没有报错了,至此 500 错误问题就解决了。 为什么网站访问很慢?...等以后小林网站日常带宽被打满充钱升级服务器设备吧哈哈。 另外,还给网站做了个优化, nginx 打开了gzip 压缩,这样传输文件会经过压缩,这样带宽流量就能减少了一些。...开启 gzip 压缩,全部资源加载完只需要不到 3 秒,性能提升 50 %! 以后网站任何异常情况,在跟大家分享,解决 bug 路上进步

44040

LinuxSOCKET编程详解

Socket就是该模式一个实现, socket即是一种特殊文件一些socket函数就是对其进行操作(读/写IO、打开、关闭)....应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...失败时返回-1,设置errno变量。在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write返回值大于0,表示写了部分或者是全部数据。2)返回值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...4.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件要调用fclose关闭打开文件

2.5K10

Redis为什么是单线程?高并发响应快?

文件描述符,进程对文件一无所知,比如文件磁盘什么位置上、内存是如何管理文件等等,这些信息属于操作系统,进程无需关心,操作系统只需要给进程一个文件描述符就足够了。...不要打电话给我,需要我会打给你 方式一: 我们主动通过I/O接口, 问内核: 这些文件描述符对应外设是不是已经就绪了?...方式二: 一种更好方法是,我们把这些文件描述符,一股脑扔给内核,霸气告诉内核:“这里1万个文件描述符,你替监视着它们,可以读写文件描述符时你就告诉好处理”。...当调用这个函数返回,我们就能知道哪些文件描述符可以进行I/O操作了。 那么哪些函数可以用来进行I/O多路复用呢?...因此我们可以看到,在这种机制下,实际上利用就是“不要打电话给我,需要我会打给你”,这就不需要一遍一遍像孙子一样问各个文件描述符了,而是翻身做主人当大爷了,“你们那个文件描述符可读或者可写了主动报上来

3.5K40

socket原理讲解_电感器作用及原理

应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...而文件描述符文件描述符一个索引,因此从某种意义上说文件指针就是句柄句柄(Windows系统上,文件描述符被称作文件句柄)。...失败时返回-1,设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write返回值大于0,表示写了部分或者是全部数据。2)返回值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...4.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件要调用fclose关闭打开文件

30410

Linux重定向及缓冲区理解

重定向:         在上一期虚拟文件系统中讲到了每个进程在打开,都会默认打开3个文件,如下: stdin     标准输入(键盘)    文件描述符:0 stdout   标准输出(显示器)...文件描述符:1 stderr   标准错误                   文件描述符:2 接下来仔细观察下面代码:  解释:先关闭默认打开标准输出文件,再打开一个文件命名为log.txt,...程序运行,显示器上什么也没打印。 可以发现,原本要打印显示器上内容竟然神奇地打印到了文件里!!!为什么???...解释原因: 当一开始关闭标准输出文件描述符1就被空了出来,再打开新文件,新文件被分配文件描述符就是1,c语言printf内部实际是往stdout中打印,fprintf也指定了是往stdout中打印...运行结果: 因为之前没关1文件,所以它被分配文件描述符是3,但我们用dup2改变了文件描述符下标为1内容,将它内容改为和下标为3内容一样,做到了重定向; 缓冲区:         在上一篇文件系统中讲到

7210

系统编程-简洁而不简单文件操作

本文通过基本文件IO操作,来了解Linux“一切文件读写。当然过程中穿插着很多其他内容。 文件I/O过程 介绍具体函数使用之前,必须说明一下文件I/O基本过程。...它们类似过程如下: 以某种模式打开文件,获取一个文件描述符文件进行读写 不需要时,关闭文件描述符 文件描述符是什么?你可以认为是一个对文件进行操作凭据,你只有通过它才能对文件进行读写。...通常0是标准输入,1是标准输出,2是标准错误(参考《如何理解Linux shell中“2>&1”》)。正是了它们,你简单程序才可以从控制台读入数据,输出日志,输出错误打印等等。...类比文件I/O操作,打开井盖,拿到绑着绳子水桶,就像是打开文件,获取文件描述符;而打水过程,就像对文件进行读写;最后需要时候,又把桶放回去,盖上井盖;而这就像关闭文件描述符。...关键就三个步骤: 以某种模式打开 操作 关闭 其中模式无非是前面提到一些模式,如读,写,或可读可写,而操作,常见为写入内容,读出内容等等,关闭就更好理解了。以上。

45510

socket接口api深度探究

image.png 1.2 一些需要预先知道内核操作api socket层大量使用了这些内核操作api,完成协议栈调用入口。深度探究socket层实现之前,先来了解下这些内核api。...SOCK_CLOEXEC: 为新打开文件描述符设置FD_CLOEXEC标志位,该标志位作用是进程使用fork()加上execve()时候自动关闭打开文件描述符。...多线程环境中,如果使用fcntl()会多出一步操作,这样就可能形成竞争。而使用accept4()就可以直接在打开文件描述符上设置,可以消除竞争问题。...写端关闭可能会发送FIN包。...这里看到进程发送完退出,会进入一段次数退避重传(15次,共924秒,哪里配置),然后没有FIN挥手过程。 send为什么成功解释是,send只会探测到本地错误,而不会探测到网络错误

2.7K370

基础IO理解与操作 - fd

Linux下一切皆文件,也就是说冯诺依曼体系下任何东西,均可视为文件为什么能这么说呢?         你还记得最初从电脑建立那个空白文件夹吗?我们从那里说起吧。...当然是,你想想,一个空白文件磁盘上占空间吗?自然占,属性需要占用空间,里面存放关于此文件一些基础信息(创建时间,修改时间,文件名.....)        ...关闭文件          打开文件,如何关闭呢?关闭就非常简单: int fclose(FILE *fp);         fp就是对应文件对象,此时该文件就不会在从内存中读取到了。...\n");fflush(stdout);  // 目前暂时不关心为什么要刷缓冲区,在后面讲缓冲区时候讲    close(fd);}         运行程序,结果显而易见。...出现错误时,返回-1,适当设置errno。         我们可以使用dup2实现上述两个功能,这样就不用close关闭显示器文件了。

72120

LinuxSOCKET编程详解

应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...而文件描述符文件描述符一个索引,因此从某种意义上说文件指针就是句柄句柄(Windows系统上,文件描述符被称作文件句柄)。...失败时返回-1,设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有俩种可能。1)write返回值大于0,表示写了部分或者是全部数据。2)返回值小于0,此时出现了错误。...我们要根据错误类型来处理。如果错误为EINTR表示时候出现了中断错误。如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接)。...4.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件要调用fclose关闭打开文件

8.2K10

如何优雅地将printf打印保存在文件中?

我们都知道,一般使用printf打印都会直接打印终端,如果想要保存在文件里呢?想你可能想到是重定向。...不过文本介绍了不是通过命令行方式,而是通过代码实现。 写文件 你可能会想,那不用printf,直接将打印写入到文件不就可以了?...重定向 实际上,我们程序在运行起来,都会有三个文件描述符: 0 标准输入 1 标准输出 2 标准错误 一般标准输出都是都直接输出到终端。...如何关闭printf打印 实际上非常简单,进程启动,只需要关闭文件描述符1(标准输出),2(标准错误)即可。什么情况下会需要呢?...有些后台进程自己日志记录方式,而不想让printf信息打印终端,因此可能会关闭。 总结 文本旨在通过将printf打印保存在文件中来介绍重定向,以及0,1,2文件描述符

9.4K31

Python实现守护进程

守护进程就是Daemon程序,是一种系统后台执行程序,它独立于控制终端并且执行一些周期任务或触发事件,通常被命名为"d"字母结尾,如常见httpd、syslogd、systemd和dockerd等...# 退出子进程 sys.exit(0) # 此时,孙子进程已经是守护进程了,接下来重定向标准输入、输出、错误描述符(是重定向而不是关闭, 这样可以避免程序...父进程之所以退出,是因为终端敲击键盘、或者关闭时给它发送了信号;而fork出来子进程,父进程自杀成为孤儿进程,进而被操作系统init进程接管,因此脱离终端控制。...每个进程自己文件描述符表,因此相同描述符可能指向同一个文件,也可能指向不同文件;来自不同进程不同描述符,当然也有可能指向同一个文件。...默认情况下,0代表标准输入,1代表标准输出,2代表标准错误。 umask权限掩码 我们知道,Linux中,任何一个文件都有读(read)、写(write)和执行(execute)三种使用权限。

1.9K80
领券