我正在尝试创建一个简单的函数来计算文本文件中的行并使用Unix命令wc
(字数)打印它。我不明白为什么它不起作用;我为wc
位置尝试了不同的路径,但没有任何作用。
相反,我收到了这个错误:
�%r : No such file or directory
我想使用wc
命令。
代码:
void count_lines() {
int p;
p=fork();
if(p == 0) {
char* args[] = {"./wc","1.txt",NULL};
execv("./wc",args);
perror(execv);
exit(0);
}
printf("waiting for child\n");
wait(NULL);
}
答案 0 :(得分:3)
除非您当前目录中有二进制文件,否则./wc
将无效。由于您要使用wc
命令,请使用它的路径:
int p;
p=fork();
if(p == 0) {
char* args[] = {"wc","1.txt",NULL};
execv("/usr/bin/wc",args);
perror("execv");
exit(0);
}
或者您可以使用execvp
让wc
中的PATH
进行搜索:
int p;
p=fork();
if(p == 0) {
char* args[] = {"wc","1.txt",NULL};
execvp("wc",args);
perror("execvp");
exit(0);
}
答案 1 :(得分:2)
您需要在代码中更正以下两行。始终提供文件位置的完整路径。如果命令执行不成功,您需要检查文件位置的访问权限,包括执行文件或命令的权限: -
char* args[]={"wc","-l","/full/path/1.txt",NULL};
execv("/usr/bin/wc",args);
通常所有unix / Linux命令都应位于目录位置/usr/bin/
。要获得命令的完整路径,请尝试如下: -
which command #here command can be wc, ls etc. so try which wc