如何在管道上使用fseek()函数

5

我正在尝试为popen的输出动态分配内存,但是尝试查找文件长度会导致“非法寻址”错误。代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
    char cmd[40] = {0};
    char * c;
    int byteCount = 0;
    FILE * pFp = NULL;
    strncpy(cmd, "ls -l", sizeof(cmd));
    pFp =  popen(cmd, "r");
    if (pFp == NULL)
        printf ("file is null");
    fseek(pFp, 0, SEEK_END);
    byteCount = ftell(pFp);
    perror("seek ");
    fclose(pFp);
}

fgets很好用,但使用fseek和popen是否有任何限制呢? 提前谢谢。

1
请适当缩进您的代码。 - haccks
popen(cmd, "r"); 这是什么? - haccks
3
那是一个函数调用。 - user529758
这个问题似乎不适合讨论,因为它无法阅读。 - user529758
你不能这样做。请参考http://stackoverflow.com/questions/5975170/how-to-determine-the-size-of-popen-stream。 - Bose
显示剩余2条评论
1个回答

17

是的,您无法从管道中向后查找数据,只能向前查找。计算机中的管道就像现实生活中的管道一样,数据仅以单向流动,并且您无法改变其流动方向。


感谢您的输入,我考虑输出为文件而不是管道。 - user2212551

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接