【发布时间】:2014-12-28 12:52:58
【问题描述】:
我正在尝试了解三个流的行为 - stdout、stdin 和 stderr。我无法从任何教科书中得到答案,所以我来到了这里。
我知道这三个存储在文件描述符表中,文件描述符为 0 (stdin)、1 (stdout) 和 2 (stderr)。我也知道这些不仅仅是文件描述符,而是可以重定向的 I/O 流。好的,那分享一下怎么样?
考虑三种情况:
- 调用fork()时:子进程和父进程共享文件描述符,但它们的stdin、stdout和stderr是否相同?
- 创建线程时:线程共享文件描述符,但 I/O 流?
-
当 execl() 被调用时:在这种情况下,当前的进程映像被新的进程映像覆盖。如果我这样做
execl("./a.out", "a.out", NULL);,那么这个新的可执行文件会获得标准输入、标准错误和标准输出的新副本吗?
欢迎所有明智的答案。
【问题讨论】:
标签: multithreading exec stdout stdin stderr