簡體   English   中英

C執行不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM