相关疑难解决方法(0)

/dev/stdin、/dev/stdout 和 /dev/stderr 的可移植性如何?

有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。

所以我有几个问题:

  1. 在Linux中的情况下,它是安全(是/否)划上等号stdinstdout以及stderr/dev/stdin/dev/stdout/dev/stderr

  2. 更一般地说,这个等价物是否“足够便携”?

我找不到任何 POSIX 参考。

io file-descriptors posix portability

69
推荐指数
4
解决办法
2万
查看次数

文件描述符链接的可移植性

我一直想知道这一点,但从来没有花时间去了解,所以我现在就这样做 -此处显示/proc/$$/fd/$N或的用法有多便携/dev/fd/$N?我理解POSIX 保证 /dev/null, /dev/tty, and /dev/console (尽管我前几天在阅读了这个答案的评论后才发现这一点但是其他的呢?

据我所知,它们很常见,但我不能指望在哪些系统中找到它们?为什么不?找到一个比另一个更有可能吗?他们会总是表现出类似的属性吗?

我倾向于以各种方式广泛使用这些设备,我想知道是否有机会尝试一下。

此外,上述问题应该被理解为只是我我想知道的,但是,因为我显然首先要问,所以我在这方面可能不是最了解的,它们不应该被视为严格的要求一个答案。如果可以,请告诉我。

process file-descriptors open-files proc portability

23
推荐指数
2
解决办法
4431
查看次数

如何在 bash 脚本中保存 /dev/stdout 目标位置?

我有一个 bash 脚本,它想/dev/stdout在用其他位置替换第一个文件描述符之前保留原始位置。

所以,很自然地,我写了一些类似的东西

old_stdout=$(readlink -f /dev/stdout)
Run Code Online (Sandbox Code Playgroud)

它没有用。很快我就明白了问题所在:

test@ubuntu:~$ echo $(readlink -f /dev/stdout)
/proc/5175/fd/pipe:[31764]
test@ubuntu:~$ readlink -f /dev/stdout
/dev/pts/18
Run Code Online (Sandbox Code Playgroud)

显然,$()在子外壳中运行,该子外壳通过管道传输到父外壳。

所以问题是:是否有一种可靠的(范围限于 Linux 发行版之间的可移植性)方法来将/dev/stdout位置保存为 bash 脚本中的字符串?

bash io io-redirection

13
推荐指数
1
解决办法
1254
查看次数

什么是打开的文件描述?

当您 fork 一个进程时,子进程继承其父进程的文件描述符。我知道当发生这种情况时,子进程会收到一份父文件描述符表的副本,每个表中的指针都指向相同的打开文件描述。这是与文件表相同的东西,如http://en.wikipedia.org/wiki/File_descriptor,还是其他东西?

file-descriptors fork processes

8
推荐指数
2
解决办法
7175
查看次数