【发布时间】:2017-05-05 07:01:17
【问题描述】:
我不是在谈论线程安全,我的意思是进程安全,默认情况下,对于每个进程,操作系统在启动新进程时会打开三个文件描述符,即 stdin、stdout 和 stderr,但我们知道 UNIX 中的一切都是文件,所以我假设这些是与不同进程共享的实际物理文件。
我的问题(基于这些是与所有进程共享的不同文件的假设,当然如果我们有文件描述符,那么我们就有文件)是:
- 为什么当多个进程同时使用时,输出到 cout/cerr 或 stdout/stderr 之间没有隔行扫描?
- 不同的进程如何只共享它们编写的 cout/cerr 或 stdout/stderr 部分?
【问题讨论】:
-
你的假设不正确
-
@RichardCritten 你能详细说明为什么吗?当我们有文件描述符时,我们也应该通过文件描述符 en.wikipedia.org/wiki/File_descriptor 的定义来拥有文件
-
正如链接所说,它们是每个进程的流而不是物理文件。文件句柄是一个抽象概念,不需要引用实际的文件。