[英]c execute doesn't work
我嘗試通過C程序執行帶有某些參數的程序。 但這似乎不起作用。 這是c中的代碼:
#include<stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 10; i++)
{
execl("tempo2","-gr fake","-f best.sim.par","-ndobs 30","-nobsd 1","-ha 12","-randha y","-start 57023","-end 60000","-rms 0.0012",NULL);
}
return 0;
}
我在Mint 17上使用gcc編譯。 在bash中,它的工作原理如下所示:
#!/bin/bash
for i in `seq 1 10`;
do
tempo2 -gr fake -f best.sim.par -ndobs 30 -nobsd 1 -ha 12 -randha y -start 57023 -end 60000 -rms 0.0012
done
誰能將bash代碼翻譯成c或告訴我做錯了什么? 感恩節快樂
您可以使用system()函數而不是execl()來執行shell命令
system("tempo2 -gr fake -f best.sim.par -ndobs 30 -nobsd 1 -ha 12 -randha y -start 57023 -end 60000 -rms 0.0012");
檢查返回碼。 根據手冊頁,
返回值為-1,並且將errno設置為指示錯誤。
我沒有您的程序,但是您需要指定“ tempo2”的完整路徑,否則您將得到errno 2 =>沒有此類文件或目錄。
execl
的第一個參數是要運行的程序的路徑。 第二個參數是出現在該程序的argv[0]
的值,並且通常是相同的。 因此,您應該在參數列表中兩次輸入"tempo2"
。 另外,命令行上的每個以空格分隔的單詞都應位於單獨的字符串中。 因此,您應該使用"-gr","fake"
代替"-gr fake"
"-gr","fake"
。
總而言之,您的execl
調用應如下所示:
execl("tempo2","tempo2","-gr","fake","-f","best.sim.par","-ndobs","30","-nobsd","1","-ha","12","-randha","y","-start","57023","-end","60000","-rms","0.0012",NULL);
最后,關於execl
一件重要事情。 它用新程序替換當前進程。 因此,即使它處於循環中, tempo2
也只會運行一次 。 要執行您想做的事情,您需要使用fork
創建一個子進程來運行每個execl
。
總而言之,您最好使用@SunDro建議的system
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.