与维基百科相比,文件描述符的简化描述是什么?他们为什么需要?比如说,以shell进程为例,它是如何应用的?
进程表是否包含多个文件描述符.如果是,为什么?
假设硬件具有无限的性能,Linux机箱是否支持> 65536个开放的TCP连接?
据我所知,短暂端口的数量(<65536)限制了从一个本地IP到一个远程IP上的一个端口的连接数.
元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的东西; 这是否意味着如果这些参数中有多个是免费的,则可以支持超过65K的连接.例如,从多个本地IP连接到多个远程主机上的单个端口号.
系统中还有另外16位的限制吗?或许文件描述符的数量?
有些日子我一直在搜索错误的工作解决方案
Error: EMFILE, too many open files
似乎很多人都有同样的问题.通常的答案是增加文件描述符的数量.所以,我试过这个:
sysctl -w kern.maxfiles=20480,
默认值是10240.这在我看来有点奇怪,因为我在目录中处理的文件数量低于10240.更奇怪的是,在我增加了文件描述符的数量之后,我仍然收到相同的错误.
第二个问题:
经过多次搜索后,我找到了解决"太多打开文件"问题的方法:
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 = requestBatches[filename] = [callback];
FS.readFile(filename, onRealRead);
// Flush out the batch on complete
function onRealRead() {
delete requestBatches[filename];
for (var i = 0, l = batch.length; i …Run Code Online (Sandbox Code Playgroud) 我想知道文件描述符和文件指针之间的区别.
此外,在什么情况下你会使用一个而不是另一个?
我基本上是在寻找fdopen()的C++版本.我对此做了一些研究,这似乎应该是容易的事情之一,但事实证明是非常复杂的.我是否遗漏了这种信念(即它真的很容易)?如果没有,是否有一个好的图书馆在那里处理这个?
编辑:将我的示例解决方案移到单独的答案.
我对这个表达有点困惑:
gcc -c -g program.c >& compiler.txt
Run Code Online (Sandbox Code Playgroud)
我知道&>filename会将stdout和stderr重定向到文件filename.但在这种情况下,&符号在大于号之后.它看起来像它的形式M>&N,在哪里M和N是文件描述符.
在上面的代码片段,不M=1和N='compiler.txt'?这究竟与以下有何不同:
gcc -c -g program.c > compiler.txt (ampersand removed)
Run Code Online (Sandbox Code Playgroud)
我的理解是每个打开的文件都与大于2的文件描述符相关联.这是正确的吗?
如果是这样,文件名是否可与其文件描述符互换作为重定向目标?
有人能告诉我为什么这不起作用?我正在玩文件描述符,但感觉有点迷失.
#!/bin/bash
echo "This"
echo "is" >&2
echo "a" >&3
echo "test." >&4
Run Code Online (Sandbox Code Playgroud)
前三行运行正常,但最后两行错误.为什么?
我最近有一个"泄漏"文件描述符的Linux进程:它打开它们并没有正确关闭其中的一些.
如果我对此进行了监控,我可以提前告知 - 该过程已达到极限.
是否有一个很好的Bash\Python方法来检查Ubuntu Linux系统中给定进程的FD使用率?
编辑:
我现在知道如何检查有多少个打开的文件描述符; 我只需要知道进程允许多少个文件描述符.某些系统(如Amazon EC2)没有该/proc/pid/limits文件.
谢谢,
乌迪
我正在使用一个科学软件,包括一个os.system()用于运行另一个科学程序的Python脚本.在子进程运行时,Python在某些时候打印以下内容:
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
我相信此消息会在os.system()返回的同时打印出来.
我现在的问题是:
哪种情况会导致这种类型的IOError?它究竟意味着什么?对于已被调用的子进程意味着什么os.system()?
file-descriptor ×10
bash ×2
c ×2
linux ×2
posix ×2
c++ ×1
file ×1
file-pointer ×1
fstream ×1
io ×1
ioerror ×1
javascript ×1
limit ×1
linux-kernel ×1
macos ×1
node.js ×1
port ×1
python ×1
scripting ×1
shell ×1
stdin ×1
stdout ×1
subprocess ×1
tcp ×1
unix ×1