2017-02-28 120 views
0

我想從我的腳本使用c代碼獲取返回值。 考慮我的劇本是在另一個分區,我安裝該分區和我打電話一樣,如何使用c代碼從shell腳本獲取返回值

value=system("./mnt1/myscript.img"); 

我需要myscript.img文件中的一個功能,應該返回一個值(例如:mmcpart) 如何能我構建腳本以獲得返回值。任何人都可以幫助我解決這個問題。 在此先感謝。

回答

0

你真正需要的是一個管道,然後fork和execvp,你可以在其中執行你的腳本。像這樣的東西應該適合你

int mypipe[2]; 
    if(pipe(mypipe) == -1) { 
     perror("Pipe creation failed"); 
     exit(1); 
    } 

    if(fork() == 0)   //first fork 
    { 
     close(STDOUT_FILENO); //closing stdout 
     dup(mypipe[1]);   //replacing stdout with pipe write 
     close(mypipe[0]);  //closing pipe read 
     close(mypipe[1]); 

     const char* myprog[] = { "ps", "-ef", 0}; 
     execvp(myprog[0], myprog); 
     perror("error in execvp for ps command"); 
     exit(1); 
    } 

    char str[200]; 
    FILE* fp = fdopen(mypipe[0], "r"); 

    while (fgets(str, 200, fp) != 0) { 
      printf("%s\n", str); 
    } 
+1

對'fork()'的調用失敗時,此答案無法解釋。相反,它假定通話是成功的。 – user3629249

1

你可以寫shell腳本的輸出到一個文件中並從C程序中讀取文件內容。

您的C程序必須嘗試僅在shell腳本進程被編譯時纔讀取文件,最好使用$? = 0

您可以將您的shell腳本文件的名稱放在.profile文件中,它會自動執行您的shell腳本。

Shell腳本編程擁有強大的文件處理命令寫入文件不應該是一個問題。

不確定爲什麼使用** tee **命令。你是否也希望將輸出發送到STDOUT?

+0

謝謝...我認爲這會有所幫助,我會盡力讓我知道..... –

+0

如何打開文件....我在啓動時運行我的腳本...我嘗試了以下的事情, (1)cat> filename << - 「EOF」 echo「$ {mmcpart}」| tee info.txt echo「$ {root_fs}」| tee -a info.txt EOF(2)echo「$ {mmcpart}」| tee info.txt echo「$ {root_fs}」| tee -a info.txt 不工作.......... –

+0

您可以將您的shell腳本文件的名稱放在.profile文件中,它會自動執行您的shell腳本。 – subir

相關問題