Tag: 文件描述符

如何检查存储在variables中的给定文件描述符是否仍然有效?

我有一个文件描述符存储在一个variables说var。 如何检查该描述符是否在后期有效? fdvar1= open(…..); fdvar2 = fdvar1; // Please ignore the bad design …. // lots of loops , conditionals and threads. It can call close(fdvar2) also. …. if(CheckValid(fdvar1)) // How can I do this check ? write(fdvar1, ….); 现在我想检查一下var1是否仍然保持打开的描述符仍然有效。 任何API的呢?

在os.system()期间会导致“IOError:错误的文件描述符”?

我正在使用一个科学软件,包括一个调用os.system()的Python脚本,用于运行另一个科学程序。 在subprocess正在运行的时候,Python在某些时候打印出下列内容: close failed in file object destructor: IOError: [Errno 9] Bad file descriptor 我相信这个消息是在os.system()返回的同时打印的。 我现在的问题是: 哪些情况会导致这种types的IOError? 这究竟意味着什么? 这对os.system()调用的subprocess意味着什么?

文件描述符

有人能告诉我为什么这不起作用吗? 我正在玩文件描述符,但感觉有点失落。 #!/bin/bash echo "This" echo "is" >&2 echo "a" >&3 echo "test." >&4 前三行运行良好,但最后两个错误。 为什么? 谢谢您的帮助!

获取最高分配的文件描述符

是否有一种可移植的方式(POSIX)来获取当前进程的最高分配的文件描述符号? 例如,我知道有一个很好的方式来获取AIX上的数字,但是我正在寻找一种可移植的方法。 我问的原因是我想closures所有打开的文件描述符。 我的程序是一个以root身份运行的服务器,为非root用户分配和执行子程序。 在subprocess中保留打开特权文件描述符是一个安全问题。 有些文件描述符可能是由我无法控制的代码(C库,第三方库等)打开的,所以我也不能依靠FD_CLOEXEC 。

什么是&&意思?

我对这个expression有些困惑: gcc -c -g program.c >& compiler.txt 我知道&>filename名将redirectstdout和stderr文件的文件filename 。 但在这种情况下,&符号大于符号。 它看起来像M>&N的forms,其中M和N是文件描述符。 在上面的代码片断中, M=1和N='compiler.txt' ? 这与以下不同: gcc -c -g program.c > compiler.txt (ampersand removed) 我的理解是,每个打开的文件都与一个大于2的文件描述符关联。这是正确的吗? 如果是这样,是一个文件名与其文件描述符可以互换作为redirect的目标?

检查Linux中给定进程的打开FD限制

我最近有一个“泄露”文件描述符的Linux进程:它打开了它们,并没有正确closures其中的一些。 如果我监控了这一点,我可以提前告诉我们这个过程已经到了极限。 有没有一个很好的,Bash \ Python的方式来检查一个Ubuntu Linux系统中给定进程的FD使用率? 编辑: 我现在知道如何检查有多less个打开的文件描述符。 我只需要知道一个进程允许多less个文件描述符 。 某些系统(如Amazon EC2)没有/proc/pid/limits文件。 谢谢, 乌迪

文件描述符和文件指针有什么区别?

我想知道文件描述符和文件指针之间的区别。 另外,在什么情况下你会使用一个而不是另一个?

节点和错误:EMFILE,打开的文件太多

有些日子,我已经寻找一个工作的解决scheme,以一个错误 Error: EMFILE, too many open files 看来很多人都有同样的问题。 通常的答案是增加文件描述符的数量。 所以,我试过这个: sysctl -w kern.maxfiles=20480 , 默认值是10240.在我看来,这有点奇怪,因为我在目录下处理的文件数量在10240以下。甚至更奇怪的是,在增加了文件描述符的数量之后,我仍然收到相同的错误。 第二个问题: 经过多次search,我find了一个解决“太多打开文件”的问题: var requestBatches = {}; function batchingReadFile(filename, callback) { // First check to see if there is already a batch if (requestBatches.hasOwnProperty(filename)) { requestBatches[filename].push(callback); return; } // Otherwise start a new one and make a real request var batch […]

现代Linux机器可以拥有的开放TCP连接的理论最大数量是多less?

假设硬件性能无限,一个Linux机箱能支持> 65536个打开的TCP连接吗? 我知道短暂端口数(<65536)限制了从一个本地IP到一个远程IP上的一个端口的连接数量。 元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的东西; 这是否意味着如果这些参数中有多于一个是免费的,则可以支持超过65K个连接。 例如从多个本地IP连接到多个远程主机上的单个端口号。 系统中还有16位的限制吗? 文件描述符的数量也许?

如何从外部进程将数据写入现有进程的STDIN?

我正在寻求从外部进程向现有进程的STDIN写入数据的方法,并发现了类似的问题如何在Python中将数据stream式传输到来自不同本地/远程进程的程序的STDIN中? 在stackoverlow中。 在这个线程中,@Michael说我们可以像下面那样获取现有进程的文件描述符,并允许在Linux上写入数据。 /proc/$PID/fd/ 所以,我创build了一个下面列出的简单脚本来testing从外部进程向脚本的STDIN (和TTY )写入数据。 #!/usr/bin/env python import os, sys def get_ttyname(): for f in sys.stdin, sys.stdout, sys.stderr: if f.isatty(): return os.ttyname(f.fileno()) return None if __name__ == "__main__": print("Try commands below") print("$ echo 'foobar' > {0}".format(get_ttyname())) print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid())) print("read :: [" + sys.stdin.readline() + "]") 这个testing脚本显示STDIN和TTYpath,然后等待一个写它的STDIN 。 我启动了这个脚本,在下面得到消息。 Try commands […]