问题标签 [posix-api]
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.
linux - 检查子文件夹是否存在linux
我正在尝试在 Linux 中检查一个文件夹是否有任何子文件夹而不遍历其子文件夹。到目前为止,我发现的最接近的是使用ftw
并在第一个子文件夹处停止 - 或使用scandir
并过滤结果。然而,对于我的目的来说,两者都是矫枉过正,我只是想要一个是/否。
在 Windows 上,这是通过调用SHGetFileInfo
然后dwAttributes & SFGAO_HASSUBFOLDER
对返回的结构进行测试来完成的。Linux上有这样的选项吗?
c - waitpid 是否为已经退出的子进程产生有效的状态信息?
如果我fork
是子进程,并且子进程在父调用之前退出waitpid
,那么设置的退出状态信息是否waitpid
仍然有效?如果是,什么时候变得无效;即,如何确保我可以调用waitpid
子 pid 并在任意时间后继续获取有效的退出状态信息,以及如何“清理”(告诉操作系统我不再对退出感兴趣已完成子进程的状态信息)?
我在玩下面的代码,似乎退出状态信息在孩子完成后至少几秒钟内有效,但我不知道多久或如何通知操作系统我不会再次调用waitpid
:
c - 在 EAGAIN 之后强制阻止读取?
我有一个可以读取的文件描述符,它可能是非阻塞的。我需要做的是简单地读取所有数据,直到到达 EOF 并将该数据写入可写文件描述符。由于执行此复制的过程不“知道”周围发生的任何事情,我不认为我可以在等待数据时做一些有用的事情,而且我不想使用while
循环(whileerrno
是不是EAGAIN
),因为我认为这会很浪费。有没有办法阻止或以其他方式暂停复制过程的执行,直到数据可用?
c - O_LARGEFILE 是否只需要写一个大文件?
O_LARGEFILE
如果我只想写一个大文件(O_WRONLY
)或附加到一个大文件( ),是否需要标志O_APPEND | O_WRONLY
?
从我在 CLucene-dev 邮件列表上读到的标题为“无法写入 >2gb 索引文件”的线程中,似乎O_LARGEFILE
可能需要编写大文件,但该讨论的参与者正在使用O_RDWR
, not O_WRONLY
,所以我不确定。
c - O_NONBLOCK 是否被设置为文件描述符或基础文件的属性?
从我在 The Open Group 网站上阅读的内容来看,fcntl
我得到的印象是,是否在文件描述符上设置,因此非阻塞 I/O 是否与描述符一起使用,应该是该文件描述符而不是基础文件。例如,作为文件描述符的一个属性,如果我复制一个文件描述符或打开另一个描述符到同一个文件,那么我可以将阻塞 I/O 与另一个一起使用,而将非阻塞 I/O 与另一个一起使用。open
read
write
O_NONBLOCK
然而,尝试使用 FIFO,似乎不可能同时为 FIFO 提供阻塞 I/O 描述符和非阻塞 I/O 描述符(因此O_NONBLOCK
set 是否是底层文件 [the FIFO] 的属性):
这让我想:是否有可能对同一个文件有一个非阻塞 I/O 描述符和阻塞 I/O 描述符,如果是这样,它是否取决于文件的类型(常规文件、FIFO、块特殊文件、字符特殊文件、套接字等)?
c - 在没有此标志的系统上模拟 O_NOFOLLOW 的好方法是什么?
我希望能够安全地在不支持的系统上open
进行O_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW
模拟。我可以通过以下方式实现我的要求:O_CREAT | O_WRONLY | O_APPEND | O_NOFOLLOW
O_NOFOLLOW
但随后我介绍了一个竞争条件,可能还有一个安全问题。
我想过可能创建一个只有用户能够写入的虚拟文件,有点像touch
ing filename
,进行lstat
检查,然后chmod
在我完成写入后使用(以更正文件模式位),但我可能会忽略一些主要的东西(例如,如果文件filename
存在,不是常规文件,或者已经是符号链接)。
你怎么看?
c - POSIX seekdir() and telldir() behaviour after target folder modification
consider the following task :
1) read a target directory contents, pass each found dirent structure to some filter function and remember filtered elements somehow for the later processing
2) some time later, iterate through the filtered elements and process them (do some I/O)
The most obvious way is to save names of sub-directories.
However, I want to keep memory usage to the minimum and to avoid additional I/O.
According to POSIX manuals, I can save position of each directory entry using telldir() and restore them later using seekdir(). To keep these positions valid, I have to keep target directory opened and to not use rewinddir() call.
Keeping a directory stream open and storing a list of dir positions(long int`s) seems to be an appropriate solution.
However, it is unclear whether stored positions remain valid after folder modification. I didn`t found any comments on these conditions in the POSIX standard.
- 1) Whether stored positions remain valid when only new directory entries are added/removed ?
- 2) Whether stored positions of unmodified directory entries remain valid in case of some of the filtered directory entries were removed ?
- 3) Is it possible for the stored position to point to another directory entry after folder modification ?
It is easy to test and find out the answer on these questions for the particular system, but I would like to know what standards say on this topic
Thank you
c - 用于文件描述符的类似“fprintf”的函数(即 int fd 而不是 FILE* fp)
也许我只是想念它,但是对于文件描述符是否没有等效于 fprintf 的函数,或者甚至没有一种在它们之间临时翻转的方法?
events - 什么是在 POSIX 环境中实现全局信号事件的良好可移植方式
用例是一个应用程序生成一个事件并发出一个信号,任何愿意监听它的应用程序都会得到。例如,应用程序更新文件的内容并发出信号。在 Linux 上,这可以通过服务员对文件调用 inotify 来完成。一种可移植的方式是让听众注册一个知名的服务器,但如果可能的话,我更喜欢更简单的方法。尽可能便携意味着只使用广泛可用的 POSIX 功能。
windows - Microsoft Windows 的 7 POSIX 实施目前处于什么位置?
Windows 7 中是否有完整的 POSIX 实现(我正在考虑适用于 UNIX 的 Windows 服务)?
它是否在每个版本的操作系统中都可用(似乎没有)?
它如何在以前的 MS Windows POSIX 实现上添加/改进或中断?
在哪里可以找到有关 Windows 7 中有关 POSIX 合规性的特定 Microsoft 方法和实施的更多信息?