从popen获得的管道流没有按预期提供数据

时间:2018-01-09 17:22:33

标签: c linux shell stream popen

我有一个命令(比如cmd)。在linux shell中代表性的输出。

output line 1
output line 2
.
.
Checkpoint 1
.
output line 20
output line 21
.
.
Checkpoint 2
Checkpoint 3
Checkpoint 4
.
.
Checkpoint 8

Checkpoint 2&的出现之间存在相当大的时间差异。 Checkpoint 3Checkpoint 3& Checkpoint 4等(每个约2秒)。

我使用如下的popen执行相同的命令并解析输出。

FILE *fp;
int status;
char path[65000];


fp = popen("cmd", "r");
if (fp == NULL)
/* Handle error */;


while(1) 
{    
    while (fgets(path, PATH_MAX, fp) != NULL) 
    {
        print("%s\n",path);

        if(!strncmp("Checkpoint",path,strlen("Checkpoint"))
           printf("Reached : %s ",path);

        if(!strncmp("Checkpoint 8",path,strlen("Checkpoint 8"))
            break;
    }

}

status = pclose(fp);
if (status == -1) {
    /* Error reported by pclose() */
} else {

}

但是使用从上面的程序获得的日志(由程序中的打印语句打印),检查点日志几乎同时出现在屏幕上。

所以我看不到Checkpoint 2Checkpoint 3之间大约2秒的时差。 Checkpoint 3Checkpoint 4& cmd等等,差不多是0.

我真的无法在我的代码片段中看到可能出错的内容,该代码段解析Dice[1]输出。

0 个答案:

没有答案