によるとman popen、「出力 popen() ストリームはデフォルトで完全にバッファリングされます」。ls -lしかし、次のコードでは、コマンドなしでコマンドのすべての情報を取得できますfflush(p)。それは理にかなっていますか?fflush(p)ユーザーバッファーに保存されているコマンドの出力を標準出力にフラッシュする必要があると思いました。
#include <stdio.h>
int main()
{
FILE *p=popen("ls -l","r");
char buf[100];
memset(buf,0x00,100);
//fflush(p);
fread(buf,sizeof(char),90,p);
printf("%s",buf);
pclose(p);
return 0;
}