gpt4 book ai didi

c - linux 编程,标准输出到管道在 execve 之前不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:05 31 4
gpt4 key购买 nike

<分区>

代码:

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("test output\n");
execv("/bin/date", argv);
return 0;
}

然后编译执行:

test@test-laptop:~/test/$ ./a.out 
test output
Thu Jun 23 17:44:06 CST 2016

test@test-laptop:~/test/1$ ./a.out | tee
Thu Jun 23 17:44:09 CST 2016

使用管道时不显示“测试输出”

然后使用 ltrace 和 strace 进行调试,我得到:

$ strace ./a.out  | tee
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb766e000
write(1, "Thu Jun 23 17:48:58 CST 2016\n", 29Thu Jun 23 17:48:58 CST 2016
) = 29
close(1)

$ ltrace ./a.out | tee
__libc_start_main(0x8048414, 1, 0xbff5fd44, 0x8048470, 0x8048460 <unfinished ...>
puts("test output") = 12
execv("/bin/date", 0xbff5fd44 <unfinished ...>
--- Called exec() ---
......
fwrite("Thu", 3, 1, 0xe024e0)
strftime(" Jun", 1024, " %b", 0x00e056a0)
.....

关于“测试输出”,程序调用“puts”,这是libc库调用,但内核“write”没有调用。为什么?

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com