3

i2cを介して加速度計データを継続的に読み取るCプログラムがあります。タブレットの向きが変わるたびに、stdoutに新しい行が出力されます。

ここで、その出力をbashスクリプトで使用して、画面の回転を変更できるようにしたいと思います。

さて、問題はこれです:私がbashでプログラムの出力を見るとき、プログラムは行ごとに変更を出力しています。出力をファイルにリダイレクトすると、出力はファイルに継続的に書き込まれますが、出力をパイプしようとしても何も起こりません。

これがCプログラムです:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int changed;
    char *orientation;

    while (1) {
        /* Read data from i2c, check for change in orientation */
        if (changed) {
            fprintf(stdout, "%s\n", orientation);
            fflush(stdout);
            changed = 0;
        }
    }

    exit(0);
}

そして、これが私のbashでの裁判です:

#!/bin/bash

# This does not work, xrandr is not called.
./i2c-rotation | xargs xrandr --orientation 
# This is working
#./i2c-rotation > output
4

1 に答える 1

1

デフォルトでxargsは、すべての引数を使用してコマンドを実行する前に、多くの引数を読み取りたいと考えています。この場合、それはおそらくあなたが望むものではありません。

xargs -L1は、入力行が完了するたびにコマンドを実行します。

于 2013-02-01T19:30:18.203 に答える