2013-04-15 26 views
0
#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腳本EXECL命令在寫入文件

{ for (i=NF;i>=1;i--){ if(s){s=s" "$i} else{s=$i }}{print s;s=""}} 

可能有人請告訴爲什麼不起作用?我所試圖做的是使用awk腳本或轉命令

感謝

+0

'爲什麼這不起作用? '請解釋 – Alex

+0

,因爲它不修改文件,如果我單獨啓動命令他們的工作,但是這樣它不 – JackRobinson

+0

是不是類似於[這個問題](http://stackoverflow.com/questions/16013336/C-EXEC-AWK-未加工) –

回答

1

要有管道(>)工作外殼需要參與修改 文件的argv [1]。 OP的代碼不調用shell,但直接啓動awk進程。

你可能想替換此行:

execl("/usr/bin/awk","awk","-f","ouk.awk",argv[k],">",argv[k],NULL); 

那些:(這意味着由argv[k]引用的字符串不包含空格)

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"); 

詳情請看你的shell的手冊頁。請注意,/bin/sh通常與其他一些shell程序(如bash)相關聯。