【发布时间】:2021-11-05 11:56:53
【问题描述】:
EXECVP系统调用是否支持IO重定向
这意味着这是给期望的输出
char *args[]={"cat","A.txt","B.txt",">","C.txt",NULL};
execvp(args[0],args);
我的意思是A.txt和B.txt中的数据会转到C.txt
如果没有,为什么?
UPD:我在评论中提出了两个疑问,请澄清
【问题讨论】:
-
没有。因为重定向是 SHELL 的一个特性; execvp 只是启动一个PROCESS。
-
您可以调用 shell 进行重定向:
char *args[] = {"/bin/sh", "-c", "cat A.txt B.txt > C.txt", NULL }; execv(args[0], args); -
@paulsm4,minor nitpick:
execvp不会启动新进程,而是替换当前进程映像。否则,是的,你是对的。 -
execvp 将使用参数
cat、A.txt、B.txt、>和C.txt。 > 不会被视为重定向。但是 execvp 将支持重定向,因为进程保留其打开的文件描述符(除非它们在 exec 上被标记为关闭),因此您可以随意重定向它们并且重定向将被保留。 -
@HAL9000:我只是想向用户解释一下“exec()”和朋友们有 NOTHING 直接与“I/O 重定向”有关,而没有得到太多“过于复杂”。我实际上用谷歌搜索了一个教程,但没有找到我喜欢的任何东西。您在下面的回答是优秀。