2012-11-22 105 views
3

我需要通過編寫C語言程序來列出當前目錄中具有644權限的所有文件。 我不能使用system(),必須使用execl()才能使用系統調用。使用execl運行Linux命令

這一條線,我在我的代碼中使用:

execl("/usr/bin/find", "find . -maxdepth 1 -perm 644", (char *)NULL); 

的問題是,代碼搜索整個磁盤,而不是當前目錄。 你能幫我修好嗎?


 ... 

     case 4: 
      int status; 
      switch (fork()){ 
       case -1: quit ("fork",1); 
       case 0: 
       execl("/usr/bin/find","find","." ,"-maxdepth" ,"1","-perm", "644",(char *)NULL) ; 
       exit (200); 
       default: 
       wait(&status); 
       exit(0); 
      } 
     } 

回答

3

獨立的參數:

execl("/usr/bin/find", "find", ".", "-maxdepth", "1", "-perm", "644", (char *)NULL); 

你調用等同於不帶參數(和一個很有趣的argv[0])調用find程序。

+0

我保持在一個while循環和切換大小寫的行,但在列出文件腳本停止。 – femchi

+0

我需要查看您的代碼以瞭解您的意思。你是否也在使用'fork()'和'wait()'?還要別的嗎?編輯你的問題;不要試圖將其置於評論中。不要摧毀原來的問題(如果我告訴你你已經知道了什麼,請致歉)。 –

+0

我加了代碼 – femchi

2
execl("/usr/bin/find","/usr/bin/find", ".", "-maxdepth", "1", "-perm", "0644",(char *)NULL); 
1

爲特定的任務,使用file tree walkftw)是比較合適的。

ftw只是一個庫,所以你不需要產生外部過程來完成工作。而且,解析結果也更容易。