问题标签 [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.
c - C中的文件描述符分配
在 C 中创建套接字或打开/创建文件时,分配给套接字/文件的文件描述符是否保证是可用的最低值描述符?C 规范在这方面对文件描述符分配有什么看法(如果有的话)?
c - 关闭/清理“混合”文件描述符/套接字
当我使用 accept() 创建一个套接字并使用 fdopen() 从中创建一个 FILE 时,我需要做什么来清理所有内容?我需要在 FILE 上执行 fclose(),在套接字上执行 shutdown() 和 close(),还是只需要 shutdown() 和/或 close() 或 fclose()?如果我不执行 fclose(),我是否必须手动释放() FILE 指针?
c# - 在 C# 中打开到文件描述符的管道连接
我有一个旧版应用程序,它从文件描述符 3 中的客户端程序读取消息。这是一个外部应用程序,所以我无法更改它。客户端是用 C# 编写的。我们如何在 C# 中打开与特定文件描述符的连接?我们可以使用像 AnonymousPipeClientStream() 这样的东西吗?但是我们如何指定要连接的文件描述符呢?
c - 退出前是否需要关闭文件描述符?
当然,大多数情况下的直接答案是“是”,我坚信一个进程应该正确清理它分配的任何资源,但我的情况是一个长时间运行的系统守护进程,它打开一个固定的启动时文件描述符的数量,并在退出之前将它们全部关闭。
这是一个嵌入式平台,我试图使代码尽可能紧凑,同时不引入任何不好的风格。但是由于文件描述符在退出之前已经关闭,这个文件描述符清理代码有什么用途吗?您是否总是关闭所有文件描述符?
bash - 如何在 unix 系统中关闭另一个进程的文件描述符
您可以使用命令lsof获取所有正在运行的进程的文件描述符,但我想做的是关闭其中一些描述符而不进入该进程。这可以在 Windows 上完成,因此您可以轻松解锁某些应用程序。
有什么命令或功能吗?
java - 在 linux 平台上使用套接字时是否存在文件描述符泄漏?
如果我通过调用例如打开和关闭套接字
Linux 声明此套接字仍处于打开状态,或者至少存在连接的文件描述符。通过 lsof 查询此进程的打开文件时,有一个关闭连接的条目:
该条目将一直保留到程序关闭为止。有没有其他方法可以最终关闭套接字?我有点担心我的 java 应用程序可能会阻塞许多文件描述符。这可能吗?或者即使设置了 ReuseAdress,java 是否保留这些套接字以重新使用它们?
c - 如何在 linux 上创建自定义文件描述符
我想创建一个文件,其描述符将具有一些可自定义的行为。特别是,我想创建一个文件描述符,当写入该文件描述符时,它将在每一行前面加上进程名称和 pid(也许还有时间),但我可以想象它对做其他事情会很有用。
我不想更改编写程序 - 一方面,我希望它适用于我系统上的所有程序,甚至是 shell/perl/等。脚本,如果不是不可能更改所有内容的源代码,那将是不切实际的。
请注意,在这种情况下管道不会这样做,因为当写入进程fork()
s 时,新创建的子进程共享 fd 并且通过管道的读取端无法区分其父进程。
有一些方法可以做到,但我认为它们相当笨拙:
- 创建一个将创建此类 fd 的内核模块。例如,您可以打开一些
/dev/customfd
然后指示模块进行一些转换等或将数据发送到用户空间或套接字等。 - 使用 LD_PRELOAD 将覆盖 fd 操作函数并在“特殊”fd 上执行此类操作。
但是,这两种方法都非常费力,所以我想知道是否有更好的方法,或者任何可以提供帮助的基础设施(如现成的库)。
我更喜欢不涉及内核更改的解决方案,但如有必要,我已准备好接受它们。
只是一个想法:FUSE 会是一个答案吗?
windows - Windows 相当于 ulimit -n
什么是 windows 等效的 unix 命令“ulimit -n”?
基本上,我想通过命令提示符设置最大 fd 限制。
select - socket编程中如何使用select()函数?
原型是:
很长一段时间以来,我一直在努力理解这个功能。我的问题是,如果它检查从 0 到 nfds-1 的所有文件描述符,并在返回时修改 read-fds、write-fds 和 except-fds,为什么我需要使用 FD_SET 将文件描述符添加到集合一开始,它会检查所有文件描述符,还是不检查?
posix - 获取最高分配的文件描述符
是否有一种可移植的方式(POSIX)来获取当前进程的最高分配文件描述符编号?
例如,我知道有一种在 AIX 上获取号码的好方法,但我正在寻找一种可移植的方法。
我问的原因是我想关闭所有打开的文件描述符。我的程序是一个服务器,它以 root 身份运行,并为非 root 用户分叉和执行子程序。让特权文件描述符在子进程中打开是一个安全问题。一些文件描述符可能被我无法控制的代码(C 库、第三方库等)打开,所以我不能依赖FD_CLOEXEC
任何一个。