gpt4 book ai didi

c - 咨询文件锁定是否适用于默认文件描述符?

转载 作者:行者123 更新时间:2023-11-30 16:33:39 26 4
gpt4 key购买 nike

例如,假设我有以下 shell 命令。

~]$ foobar 2>> foobar.log

上述命令将标准错误输出(stderr,或文件描述符2)重定向到文件foobar.log,并附加输出(>> 而不仅仅是 >)。

现在,假设两个用户都运行完全相同的命令。在这种情况下,文件的输出是交错的,使得阅读变得相当困难。

程序可以利用“建议文件锁定”(通过 fcntl() C 函数)作为文件上的操作系统级互斥,本质上是协调多个进程,以便只有一个进程进行写入在任何给定时间到文件。因此,两个进程的输出不再交错并且变得更易于阅读。

但是,shell 是如何实现上面的调用的呢?如果他们使用pipe()系统调用,建议文件锁定将不起作用。另一方面,如果他们在调用fork()/exec()之前使用dup()(或其他一些变体),那么建议文件锁定应该起作用。

在这种情况下,建议文件锁定应该对 shell 重定向的标准输出(stdout,文件描述符 1)和标准错误(stderr,文件描述符 2)起作用)?

最佳答案

fcntl() 文件锁绑定(bind)到进程,而不是线程。因此,锁定附加到仅对该进程可用的内容的文件描述符似乎毫无用处。不仅没有实际的文件需要锁定(例如,机制必须以某种方式有所不同),锁定其自己的 stderr 的进程也不会与其他人竞争该锁。

关于c - 咨询文件锁定是否适用于默认文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com