2015-12-17 15 views
0

預先感謝您的幫助。創建運行並將批處理命令傳遞給第二個C程序的C程序

我對C比較陌生,想完成以下任務。我有一個C程序,需要一系列控制檯輸入,直到發出終止命令。例如

./myCProg //runs myCProg in console 
do this 
do that 
..... 
quit // terminates program 

我有一個包含一系列我想在上面給出的格式運行的命令的文件。我想創建第二個C程序,它將運行上面給出的C程序,並將文件中的命令傳遞給它以加快速度。大多數情況下,我知道如何做到這一點。但是,如何在第二個C程序中運行第一個C程序並將命令傳遞給它?

+0

您使用的是什麼平臺? –

+0

我正在使用linux – HXSP1947

+1

很不清楚的問題;我猜測並提供了一個試探性的答案。請**編輯你的問題**以改進它(什麼操作系統,什麼樣的命令,每個命令做什麼) –

回答

2

在你的第二個程序中,用open打開輸入文件,然後fork()。在分叉進程中,使用dup2將輸入文件的文件描述符複製到文件描述符0,然後使用exec函數調用第一個程序。

結果是第一個程序在輸入文件連接到它的標準輸入的情況下運行,就像從命令行運行./prog1 < input_file一樣。

int fd = open("input_file", O_RDONLY); 
if (fd == -1) { 
    perror("open failed"); 
    exit(1); 
} 
pid_t pid = fork(); 
if (pid == -1) { 
    perror("fork failed"); 
    exit(1); 
} else if (pid == 0) { 
    dup2(fd, 0); 
    execl("/path/to/prog1", "prog1", NULL); 
    perror("exec failed"); 
    exit(1); 
} 
+0

這將運行第二個程序,但我怎樣才能以編程方式將命令傳遞給它?第二個程序接受來自終端的用戶輸入的命令。 – HXSP1947

+0

@ HXSP1947看我的編輯。輸入文件成爲第一個程序的輸入。 – dbush

+0

太棒了!非常感謝你 – HXSP1947

1

(你想達到什麼還不清楚,我只是猜測,並是操作系統專用的;我猜你使用的是Linux或其他一些POSIX)

這似乎有些相似的外殼。您可能需要靈感來源於現有炮彈的代碼(如bashsashzshfish ...)

另外,嵌入現有的一些解釋(如GuileLua ...)在頂部的C程序。

順便說一句,從C運行命令,考慮system(3)popen(3);例如,你可能popen("/bin/sh", "w")fprintf一些shell命令,然後pclose

也許,你需要通過閱讀advanced linux programming獲得了廣闊的圖片,然後看syscalls(2)(特別是fork(2)pipe(2)dup2(2)execve(2),....)

相關問題