我有一个简单的程序(工作示例):
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t = getpid();
char str[30];
sprintf(str, "/proc/%d/fd", my_pid);
printf("hello, I am gonna print out: %s", str);
execvp( "ls", (char *[]) { "ls", str, NULL } );
return 0;
}
在 Linux VM 上使用 gcc 编译。我的问题是为什么发送到
printf
的输出从不打印。
我知道
printf
缓冲它的输出并且只在 \n
上刷新。我想知道为什么在这种情况下它不打印。我读到输出流在程序退出时被刷新。 printf
在 malloc
的内存中缓冲输出(我在我的实现中确认了这一点)。
我对此的问题(欢迎提供更多详细信息):
execvp
的调用会导致输出打印在 STDOUT 上,而不是按原样打印?我的想法是,即使在ls
蚕食了进程之后,它不会仍然被认为是程序退出吗?printf
的内存缓冲区会被视为输出流吗?10
上的文件描述符zsh
和255
上的bash
。谢谢你的时间。