stdin/stdout/stderr或cin/cout/cerr进程是否安全?

Vis*_*ant 1 linux operating-system

我不是说线程安全,通过进程安全我的意思是,对于每个进程默认操作系统在启动一个新进程时打开三个文件描述符,即stdin,stdout和stderr,但是我们知道UNIX中的所有内容都是文件,所以我假设这些是与不同进程共享的实际物理文件.

我的问题(基于这些假设,这些是与所有进程共享的不同文件,当然如果我们有文件描述符,那么我们有文件)是:

  1. 为什么当多个进程同时使用它时,输出到cout/cerr或stdout/stderr之间没有交错?
  2. 不同的进程如何只共享由它们编写的cout/cerr或stdout/stderr的那部分?

dus*_*uff 12

...因为我们知道UNIX中的所有内容都是文件...

这是一种过度概括.

我假设cout和cerr是与不同进程共享的物理文件.

你的假设不正确.它们不是"物理"文件; 它们没有文件名,也没有存储在磁盘上.

coutcerr(通常称为stdout和stderr)是文件描述符.它们可以引用文件,但更常见的是引用终端或管道.每个进程都有自己的文件描述符集; stdin/stdout/stderr只是每个进程用于输入和输出的标准三个文件描述符集的名称.

当多个进程同时使用它时,为什么输出到cout/cerr之间没有隔行扫描?

另一个错误的假设 写入同一文件描述符的多个进程可能导致交错输出.但是,写入不同文件描述符的多个进程不会相互干扰.