我想從我的腳本使用c代碼獲取返回值。 考慮我的劇本是在另一個分區,我安裝該分區和我打電話一樣,如何使用c代碼從shell腳本獲取返回值
value=system("./mnt1/myscript.img");
我需要myscript.img文件中的一個功能,應該返回一個值(例如:mmcpart) 如何能我構建腳本以獲得返回值。任何人都可以幫助我解決這個問題。 在此先感謝。
我想從我的腳本使用c代碼獲取返回值。 考慮我的劇本是在另一個分區,我安裝該分區和我打電話一樣,如何使用c代碼從shell腳本獲取返回值
value=system("./mnt1/myscript.img");
我需要myscript.img文件中的一個功能,應該返回一個值(例如:mmcpart) 如何能我構建腳本以獲得返回值。任何人都可以幫助我解決這個問題。 在此先感謝。
你真正需要的是一個管道,然後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);
}
你可以寫shell腳本的輸出到一個文件中並從C程序中讀取文件內容。
您的C程序必須嘗試僅在shell腳本進程被編譯時纔讀取文件,最好使用$? = 0
您可以將您的shell腳本文件的名稱放在.profile文件中,它會自動執行您的shell腳本。
Shell腳本編程擁有強大的文件處理命令寫入文件不應該是一個問題。
不確定爲什麼使用** tee **命令。你是否也希望將輸出發送到STDOUT?
謝謝...我認爲這會有所幫助,我會盡力讓我知道..... –
如何打開文件....我在啓動時運行我的腳本...我嘗試了以下的事情, (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 不工作.......... –
您可以將您的shell腳本文件的名稱放在.profile文件中,它會自動執行您的shell腳本。 – subir
對'fork()'的調用失敗時,此答案無法解釋。相反,它假定通話是成功的。 – user3629249