C 将正在运行的程序的输出管道化到xargs

C 将正在运行的程序的输出管道化到xargs,c,bash,shell,C,Bash,Shell,我有一个C程序,通过i2c连续读取加速度计数据。每当平板电脑的方向发生变化时,它都会向标准输出一条新线 现在,我希望能够在bash脚本中使用该输出来更改屏幕的旋转 现在,问题是:当我在bash中查看程序的输出时,程序正在逐行输出更改。当我将输出重定向到文件时,输出会连续写入文件中,但当我尝试通过管道输出时,什么也没有发生 下面是C程序: #include <stdio.h> int main(int argc, char *argv[]) { int changed;

我有一个C程序,通过i2c连续读取加速度计数据。每当平板电脑的方向发生变化时,它都会向标准输出一条新线

现在,我希望能够在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);
}
默认情况下,xargs希望在使用所有参数运行命令之前读取大量参数。在这种情况下,这可能不是你想要的

xargs-L1在完成每一行输入后运行命令。

尝试以下操作:xargs-xrandr-orientation
#!/bin/bash

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