4

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 は正常に動作しますが、popen で fseek を使用する際に制約はありますか? 前もって感謝します。

4

1 に答える 1

16

はい、パイプから後方にシークすることはできません。前方にのみシークします。コンピューターのパイプは実生活のパイプと同じで、データは一方向にしか流れず、流れを変えることはできません。

于 2013-10-04T17:19:38.720 に答える