1

私は持っている

    #!/bin/sh

    func1()
    {
        echo "This is func1 from shell script"
    }

    func2()
    {
        echo "This is func2 from shell script"

    }

C プログラムから func1 と func2 を呼び出したい。それをしてもいいですか ?

4

3 に答える 3

7

これは良いアイデアとは思えませんが、次のように書くことができると思います。

if (! fork()) { // TODO fork can return -1 on error; should check for that
    execl("/bin/sh", "-c", ". FILE && func1", (char *)NULL);
    // TODO should check to make sure execlp successfully replaced the process
}

は、を定義するファイルFILEの名前です。上記は子プロセスを生成し、その子プロセスを引数(「実行するスクリプトが次の引数であることを意味する」) と(これはスクリプトです。つまり、 "でコマンドを実行し、それが成功した場合は、コマンドを実行します")。.shfunc1-c. FILE && func1FILEfunc1

詳細については:

于 2013-01-25T05:57:29.317 に答える
2

fork / exec を使用するよりも少し簡単なのは、stdlib の "system" コマンドです。

man 3 systemを参照してください。

あなたのbash関数がファイル「/tmp/scripts.sh」にあると仮定します...

system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
于 2013-01-26T02:32:50.333 に答える
0

実行中のスクリプトの終了コードを受け取りたい場合は、system を使用する必要があります。それ以外の場合は、vfork + exec* を使用します。

于 2013-01-26T02:36:05.657 に答える