你好,我正在尝试在forked子进程中使用execv
函数来执行以下命令:ls
,grep
,sort
,awk
等,但ls
,grep
工作,sort
,awk
等不工作,execv
返回-1
失败,argv
输入是stdin
,argv[0]=sort
,"sort t.txt"
,argv[1]=t.txt
。例如,当我输入grep 5 t.txt
时,它会在t.txt中打印出3个数字,其中包括5,而ls
会打印出目录中的每个文件。为什么只有ls
和grep
有效,而其余命令无效?
第一个
1条答案
按热度按时间z0qdvdin1#
问题是因为您硬编码了要在
/bin/
中找到的命令,而某些命令(如sort
命令)不在该位置(sort
通常在/usr/bin/
中)。要解决这个问题,并且能够在标准路径中使用 any 命令,请改用
execvp
:与
execv
的不同之处在于,execvp
将使用环境变量PATH
来搜索命令。请阅读the
exec
family manual page了解不同版本的详细信息。