0
static int
GPIOUnexport(int pin)
{
    char buffer[BUFFER_MAX];
    ssize_t bytes_written;
    int fd;

    fd = open("/sys/class/gpio/unexport", O_WRONLY);
    if (-1 == fd) {
        fprintf(stderr, "Failed to open unexport for writing!\n");
        return(-1);
    }

    bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
    write(fd, buffer, bytes_written);
    close(fd);
    return(0);
}

上記の GPIO コードに関連するいくつかの質問があります

1) ssize_t を使用する理由 なぜintを使わないのですか?

2) /sys/class/gpio/unexport" はシステム ファイルですか? そうでない場合、それは何ですか?

3) snprintf は何かをバッファに出力しますが、書き込み機能は冗長ですか? または、どの書き込み関数が別の方法で実行できますか?

4) open を使用する代わりに、代わりに ioctl 関数を使用できますか?

4

1 に答える 1

1
  1. ssize_tコード サンプルで;を使用する理由がわかりません。の戻り値の型はsnprintfisintなので、 an を使用するint方が良いでしょう (暗黙のキャストを避けるため)。ssize_t署名されており、ほとんどの場合、少なくとも と同じ大きさであるintため、おそらく害はありません。

  2. はい、Linux のシステム ファイルです。このファイルに GPIO ピンの番号を書き込むと、汎用 GPIO ドライバーから GPIO ピンが "エクスポート解除" され、事実上、ドライバーはピンを処理しないことを宣言します (他の GPIO ドライバーがそれを使用できるようにします)。

  3. dprintfファイル記述子に直接書き込むために使用できfd、一時バッファは必要ありません。dprintf他のバリアントほど知られていないため、元のコードの作成者が代わりに中間バッファーを使用して、標準の低レベル関数printfを呼び出すことにしたのかもしれません。write

  4. どういうioctl機能のことですか?

于 2013-10-07T07:28:42.907 に答える