【发布时间】:2017-04-08 20:24:30
【问题描述】:
我正在尝试制作一个使用exec 调用ls 和grep 系统调用的程序。具体来说,我必须执行ls > tmp; grep -c pattern < tmp 才能计算满足该模式的文件数。如您所见,我将 ls 的内容保存在 tmp 文件中,然后我想使用 grep 对文件进行计数。
假设pattern = txt。我正在尝试以下代码:
char *a = "ls > tmp";
char *b = " -c ";
char *fin = " < tmp";
char *comanda;
if((comanda = malloc(strlen(pattern)+strlen(pattern)+1)) != NULL){
comanda[0] = '\0'; // ensures the memory is an empty string
strcat(comanda,b);
strcat(comanda, pattern);
strcat(comanda,fin);
} else {
return -1;
}
ret = execl("/bin/sh","sh","-c",a,NULL);
ret = execl("/bin/sh","sh","-c",comanda, NULL);
但它显示了以下错误:ls: cannot access > tmp: No such file or directory。所以我不知道如何获取grep的值,因为execl函数没有返回值,那么如何实现grep的值呢?
【问题讨论】:
-
您需要在使用
fork()创建的子进程中运行execl。execl()将当前进程替换为您运行的程序,只有在尝试加载程序时出错时才会返回。 -
这是我的实际观点,在子进程中我将使用
execl,但无论如何我都会遇到同样的错误:ls: cannot access > tmp: No such file or directory -
除非我将其更改为
char *a = "ls '> tmp'";,否则我无法重现该错误 -
你能告诉我你的代码吗?