问题标签 [file-descriptor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1547 浏览

file - 文件描述符和打开文件

我有两个简单的问题:

两个文件描述符什么时候指向同一个打开的文件?

两个打开的文件什么时候指向同一个 inode ?

另外,如果您碰巧有一些很好的文档,其中包含解释这一点的图表,如果您向我展示它的链接,我将非常感激 :)

谢谢!

0 投票
3 回答
8650 浏览

multithreading - Multiple file descriptors to the same file, C

I have a multithreaded application that is opening and reading the same file (not writing). I am opening a different file descriptor for each thread (but they all point to the same file). Each thread then reads the file and may close it and open it again if EOF is reached. Is this ok? If I perform fclose() on a file descriptor does it affect the other file descritptors that point to the same file?

0 投票
1 回答
10875 浏览

c++ - 带有close()套接字的错误文件描述符(c ++)

当我的程序无法连接另一台主机时,我的文件描述符用完了。close() 系统调用不起作用,打开的套接字数量增加。我可以用

cat /proc/sys/fs/file-nr

从控制台打印:

连接:没有到主机的路由

关闭:错误的文件描述符

连接:没有到主机的路由

关闭:错误的文件描述符

..

代码:

使固定:

0 投票
1 回答
1346 浏览

glassfish - 使用哪些工具以及如何查找从 Glassfish 泄漏的文件描述符?

我们每周都会将新代码发布到生产环境中,Glassfish 没有遇到任何问题。这个周末我们不得不在我们的托管服务提供商那里移动机架。没有任何代码更改(它们只是关闭、移动、重新安装和打开电源),但我们在一个新的网络基础设施上,突然我们像筛子一样泄漏文件描述符。所以我猜想尝试建立某种连接,但现在由于网络更改而失败。

我在带有嵌入式 IMQ 实例的 RHEL4 上运行 Glassfish v2ur2-b04/AS9.1_02。搬家后,我开始看到:

[#|2010-04-25T05:34:02.783+0000|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=33;_ThreadName=SelectorThread-?4848;_RequestID=c4de6f6d-c1d6- 416d-ac6e-49750b1a36ff;|WEB0756:在 HTTP 处理期间捕获异常。 java.io.IOException:在 sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)中
打开的文件太多 ... [#|2010-04-25T05:34:03.327+0000|WARNING|sun-appserver9.1| javax.enterprise.system.stream.err|_ThreadID=34;_ThreadName=Timer-1;_RequestID=d27e1b94-d359-4d90-a6e3-c7ec49a0f383;|java.lang.NullPointerException at com.sun.jbi.management.system.AutoAdminTask .pollAutoDirectory(AutoAdminTask.java:1031)



使用 lsof 我检查文件描述符的数量,我看到很多条目,如下所示:

java 18510 root 8556u sock 0,4 1555182 无法识别协议
java 18510 root 8557u sock 0,4 1555320 无法识别协议
java 18510 root 8558u sock 0,4 1555736 无法识别协议
java 18510 root 8559u sock 0,4 1555883 无法识别协议

如果我每分钟计算一次打开的文件描述符,我会看到它每分钟增长 12 个。我不知道这些插座是什么。

我已经取消部署我的应用程序,所以只有一个普通的 Glassfish 实例在运行,我仍然看到它每分钟泄漏 12 个文件描述符。所以我认为这个泄漏是在 Glassfish 或潜在的 IMQ 中。

我应该采取什么方法来追踪这些未知协议的套接字?我可以使用哪些工具(或者我可以将标志传递给 lsof)来获取有关查看位置的更多信息?

谢谢,

夹头

0 投票
7 回答
57224 浏览

c++ - 如何从 POSIX 文件描述符构造 c++ fstream?

我基本上是在寻找 fdopen() 的 C++ 版本。我对此进行了一些研究,这是其中似乎应该很容易的事情之一,但结果却非常复杂。我是否在这种信念中遗漏了一些东西(即它真的很容易)?如果没有,是否有一个好的图书馆可以处理这个问题?

编辑:将我的示例解决方案移至单独的答案。

0 投票
2 回答
1929 浏览

c - 弹出后重复的文件描述符

我在linux下使用popen执行命令,然后4个进程使用相同的输出。我试图再次复制文件描述符以将其传递给每个进程。这是我的代码:

实际上,如果将 total 设置为 1 它工作正常,在更改 total = 4 后它不再工作。这个答案太接近我需要的: 链接

0 投票
2 回答
563 浏览

c - 在 EAGAIN 之后强制阻止读取?

我有一个可以读取的文件描述符,它可能是非阻塞的。我需要做的是简单地读取所有数据,直到到达 EOF 并将该数据写入可写文件描述符。由于执行此复制的过程不“知道”周围发生的任何事情,我不认为我可以在等待数据时做一些有用的事情,而且我不想使用while循环(whileerrno是不是EAGAIN),因为我认为这会很浪费。有没有办法阻止或以其他方式暂停复制过程的执行,直到数据可用?

0 投票
2 回答
11917 浏览

c - O_LARGEFILE 是否只需要写一个大文件?

O_LARGEFILE如果我只想写一个大文件(O_WRONLY)或附加到一个大文件( ),是否需要标志O_APPEND | O_WRONLY

从我在 CLucene-dev 邮件列表上读到的标题为“无法写入 >2gb 索引文件”的线程中,似乎O_LARGEFILE可能需要编写大文件,但该讨论的参与者正在使用O_RDWR, not O_WRONLY,所以我不确定。

0 投票
1 回答
27742 浏览

c - O_NONBLOCK 是否被设置为文件描述符或基础文件的属性?

从我在 The Open Group 网站上阅读的内容来看,fcntl我得到的印象是,是否在文件描述符上设置,因此非阻塞 I/O 是否与描述符一起使用,应该是该文件描述符而不是基础文件。例如,作为文件描述符的一个属性,如果我复制一个文件描述符或打开另一个描述符到同一个文件,那么我可以将阻塞 I/O 与另一个一起使用,而将非阻塞 I/O 与另一个一起使用。openreadwriteO_NONBLOCK

然而,尝试使用 FIFO,似乎不可能同时为 FIFO 提供阻塞 I/O 描述符和非阻塞 I/O 描述符(因此O_NONBLOCKset 是否是底层文件 [the FIFO] 的属性):

这让我想:是否有可能对同一个文件有一个非阻塞 I/O 描述符和阻塞 I/O 描述符,如果是这样,它是否取决于文件的类型(常规文件、FIFO、块特殊文件、字符特殊文件、套接字等)?

0 投票
2 回答
1688 浏览

c - 如何从文件描述符执行程序?

当我只知道描述符时,我需要执行一个文件。也可能没有指向该文件的链接,因此以某种方式找出名称不是一种选择。所有 execve()、execvp() 等函数都采用文件名。dlopen() 也有一个名字。

丑陋的解决方案(比如读取文件和调用一些函数指针)是可以的。