一部のコマンドのみを実行するexec関数は、echoを実行しません

haxonek

execファミリーの関数を介してコマンドライン引数(具体的にはecho)を実行しようとしています。独自の実行可能ファイルを作成して実行すると、execv関数を実行できますが、touchまたはechoを実行しようとすると、-1が返されます。

#include <stdio.h>
#include <unistd.h> // exec functions
#include <sys/types.h> // pid_t
#include <sys/wait.h>

#define HIGH 1
#define LOW 0

int digitalWrite(int pin, short type) {

    pid_t pid = fork();
    if (pid == 0) {
        printf("pid == %i\n", pid);
        if (type == HIGH) {
            char* args[] = {"echo", "1", ">", "/sys/class/gpio/gpio67/value", NULL};
            int val = execv(args[0], args);
            printf("ran function execl, %i\n", val);
        } else {
            printf("Unable to do anything but set pin to HIGH\n");
        }
    } else if (pid < 0) { // pid < 0
        printf("fork failed\n");
    }

    wait(NULL);
}

int main() {

    printf("Starting digitalWrite\n");

    digitalWrite(0, HIGH);

    printf("Completed digitalWrite()\n");

    return 0;
}

コンテキストのために、ここに私のビルドがあります:

$ gcc wiringbeagle.c 
$ ./a.out 
Starting digitalWrite
pid == 0
ran function execl, -1
Completed digitalWrite()
Completed digitalWrite()
$ ls
a.out  wiringbeagle.c

コマンドecho 1 > /sys/class/gpio/gpio67/valueはそれ自体でターミナルで正常に実行echo hi > tmpfile.txtされます。ローカルファイルを作成して(つまり、tmpfile.txtにタッチして)実行しようとすると、コマンドラインで期待どおりに実行されますが、プログラムでは実行されません。

私はexecvで何かを理解していないに違いありません、そしてどんな援助も大いにありがたいです!

いう

の最初の引数execvは、実行されるファイルです。シェルとは異なりexecvPATH環境変数で示されるディレクトリを検索しないため、実行可能ファイルへの完全なパスを指定する必要があります。echo現在の作業ディレクトリに呼び出さた実行可能ファイルがない限りexecv("echo",...)、「ファイルが見つかりません」というエラーで失敗します。perrorより良いエラーメッセージを取得するために使用します)。

シェルのように実行可能ファイルを検索する場合は、を使用しますexecvpただし、シェルはおそらくecho組み込みコマンドとして実行されるためecho、シェルが使用するものと同じではないことに注意してくださいこの場合、それは問題ありません。

これを修正すると、別の問題が発生します。シェルを使用するのではなく、引数を使用してコマンドラインユーティリティを呼び出すだけなので、引数">"は単なる引数です。これは、リダイレクト(およびパイプ、引用、その他の便利なもの)を処理するシェルです。したがって、達成するのは、3つの引数をstdoutに送信することだけです。

このsystem関数を使用してシェルを使用してコマンドを実行するか、を実行するfreopen前に子でstdoutを実行してリダイレクトを自分で設定することができますexecvp

このmanコマンドを使用すると、システムインターフェイスに関する非常に多くの情報を取得できますたとえば、何をするかを学ぶにfreopenは、を使用しますman freopenまた、インターネット上のマンページを読むこともできます。http://man7.org/linux/man-pages/man3/freopen.3.htmlですが、ご使用のシステムのドキュメントはすぐそこにあり、システムにインストールされているソフトウェアの実際のバージョンにも適用されます(ドキュメントをインストールしました)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Windowsコマンドライン:パスの一部として変数を使用してコマンドを実行することはできません

分類Dev

一部のTFSコマンドを実行できません

分類Dev

外部.jsはコードの一部のみを実行します

分類Dev

Bashで複数のコマンドを実行する方法(一部はバックグラウンドで)

分類Dev

コードの一部のみを実行する方法

分類Dev

一部のLinuxシェルスクリプトがexecを使用してコマンドを実行するのはなぜですか?

分類Dev

PHP exec()は最後のコマンドのみを実行しますか?

分類Dev

一部のコマンドはPHPexec()で実行されますが、他のコマンドは実行されません。これを回避/修正するにはどうすればよいですか?

分類Dev

一部のコマンドは、ajaxが完了または成功した後に実行されません

分類Dev

実行コマンド(つまりF5)の一部としてバッチファイルを実行することは可能ですか?

分類Dev

gnomeターミナルで一部のコマンドを実行できません

分類Dev

コードの一部をデバッグ中にのみ実行させることは可能ですか?

分類Dev

Python Paramiko exec_commandを使用して実行すると、一部のUnixコマンドが「<command> notfound」で失敗する

分類Dev

&とともにexecを使用すると、最後のコマンドは実行されません

分類Dev

sapplyの関数は最後の1つのコマンドのみを実行しますか?

分類Dev

コマンド(つまりgrep)は、glob拡張の一部として実行されたことをどのように知るのですか?

分類Dev

mysql:コマンドが同期していません。現在、このコマンドを実行することはできません-> php関数でクエリを実行する場合

分類Dev

引数を使用したコマンドの実行は、Stdinとは関係ありませんか?

分類Dev

RxJavaはメインスレッドでフラットマップの一部を実行します

分類Dev

URLの一部に* this *が含まれている場合はPHPコード* this *を実行します

分類Dev

onlyifの一部として別のコマンドを実行するようにPuppetexecをどのように構成しますか

分類Dev

Array Uniqueは、実行後に一部の配列を表示しません

分類Dev

MySQLのPython変数はコマンドを実行します

分類Dev

-execを指定したfindコマンドは-execコマンドを実行しません

分類Dev

文字列として挿入されたコードの一部のみを実行します

分類Dev

一部のコードを1回だけ実行する

分類Dev

関数はすべての行を実行しません

分類Dev

bash配列の一部がコマンドとして実行されるのはなぜですか?

分類Dev

これらのコードの一部は実行されません

Related 関連記事

  1. 1

    Windowsコマンドライン:パスの一部として変数を使用してコマンドを実行することはできません

  2. 2

    一部のTFSコマンドを実行できません

  3. 3

    外部.jsはコードの一部のみを実行します

  4. 4

    Bashで複数のコマンドを実行する方法(一部はバックグラウンドで)

  5. 5

    コードの一部のみを実行する方法

  6. 6

    一部のLinuxシェルスクリプトがexecを使用してコマンドを実行するのはなぜですか?

  7. 7

    PHP exec()は最後のコマンドのみを実行しますか?

  8. 8

    一部のコマンドはPHPexec()で実行されますが、他のコマンドは実行されません。これを回避/修正するにはどうすればよいですか?

  9. 9

    一部のコマンドは、ajaxが完了または成功した後に実行されません

  10. 10

    実行コマンド(つまりF5)の一部としてバッチファイルを実行することは可能ですか?

  11. 11

    gnomeターミナルで一部のコマンドを実行できません

  12. 12

    コードの一部をデバッグ中にのみ実行させることは可能ですか?

  13. 13

    Python Paramiko exec_commandを使用して実行すると、一部のUnixコマンドが「<command> notfound」で失敗する

  14. 14

    &とともにexecを使用すると、最後のコマンドは実行されません

  15. 15

    sapplyの関数は最後の1つのコマンドのみを実行しますか?

  16. 16

    コマンド(つまりgrep)は、glob拡張の一部として実行されたことをどのように知るのですか?

  17. 17

    mysql:コマンドが同期していません。現在、このコマンドを実行することはできません-> php関数でクエリを実行する場合

  18. 18

    引数を使用したコマンドの実行は、Stdinとは関係ありませんか?

  19. 19

    RxJavaはメインスレッドでフラットマップの一部を実行します

  20. 20

    URLの一部に* this *が含まれている場合はPHPコード* this *を実行します

  21. 21

    onlyifの一部として別のコマンドを実行するようにPuppetexecをどのように構成しますか

  22. 22

    Array Uniqueは、実行後に一部の配列を表示しません

  23. 23

    MySQLのPython変数はコマンドを実行します

  24. 24

    -execを指定したfindコマンドは-execコマンドを実行しません

  25. 25

    文字列として挿入されたコードの一部のみを実行します

  26. 26

    一部のコードを1回だけ実行する

  27. 27

    関数はすべての行を実行しません

  28. 28

    bash配列の一部がコマンドとして実行されるのはなぜですか?

  29. 29

    これらのコードの一部は実行されません

ホットタグ

アーカイブ