gpt4 book ai didi

使用 execvp(cmd, args) 从命令捕获错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:49 27 4
gpt4 key购买 nike

p = fork;
if (p == 0){
execvp(args[0], args);
}
else {
wait(&status);
}

如果给定的命令返回错误,我该如何打印出来?例如,如果我给 execvp 命令“ls -8”,我如何让它打印到标准输出

ls: 无效选项 -- '8'

最佳答案

当你 fork 时,被 fork 的进程会为 stdin/out/err 共享相同的文件描述符。这意味着它打印到 stdout 的任何内容都将转到 stdout。 stderr 也一样。

exec*() 函数替换当前进程。

因此,当“ls -8”向 stderr 打印某些内容时,它将转到 stderr。您必须将 stderr 和 stdout 短路才能让 stderr 转到 stdout。

你需要这样的东西:

p = fork;
if (p == 0){
close(2); /* close stderr */
dup(1); /* duplicate stdout as stderr */
execvp(args[0], args);
}
else {
wait(&status);
}

关于使用 execvp(cmd, args) 从命令捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336272/

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