#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 512
main(int argc,char* argv[]){
int k;
for (k=0; k<argc; k++) {
if (k%2==0) {
if (fork()==0){
execl("/user/bin/rev","rev",argv[k],">",argv[k],NULL);
exit(1);
}
}
else
{
if (fork()==0){
execl("/usr/bin/awk","awk","-f","ouk.awk",argv[k],">",argv[k],NULL);
exit(1);
}
wait(0);
}
}
}
awk脚本
{ for (i=NF;i>=1;i--){ if(s){s=s" "$i} else{s=$i }}{print s;s=""}}
有人可以告诉我为什么这不起作用?我想要做的是修改 文件argv [i]使用awk脚本或rev命令
由于
答案 0 :(得分:1)
要使管道(>
)工作,需要涉及shell。 OP的代码不会调用shell,而是直接启动awk
进程。
您可能想要替换此行:
execl("/usr/bin/awk","awk","-f","ouk.awk",argv[k],">",argv[k],NULL);
由那些人:
char cmd[PATHMAX] = "";
sprintf(cmd, "\"/usr/bin/awk -f out.awk %s > %s\"", argv[k], argv[k]);
execl("/bin/sh", "sh", "-c", cmd, (char *) NULL);
/* As execl() does not return if successful, getting here indicates an error! */
perror("execl() failed");
(这意味着argv[k]
引用的字符串不包含空格。)
有关详细信息,请参阅shell的手册页。请注意,/bin/sh
通常与其他一些shell程序相关联,例如bash
。