c - "output popen() streams are fully bufered by default"是什么意思?

标签 c linux file-io

根据 man popen,“默认情况下输出 popen() 流是完全缓冲的”。但是对于下面的代码,我仍然可以在没有 fflush(p) 命令的情况下获取我的 ls -l 命令的所有信息。这有意义吗?我想我需要 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;
}

最佳答案

这是输入 popen() 流,而不是输出流。

fflush() 函数仅对输出流或更新流进行操作,而不对输入流进行操作。

关于c - "output popen() streams are fully bufered by default"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527864/

相关文章:

c - OpenGL 默认帧缓冲区内容在最小化/恢复周期后消失了吗?

c - 在函数中通过指针修改 char* 会导致崩溃

linux - 使用awk格式化没有制表符的ls输出?

linux 网络作业管理

c# - 使用 File.WriteAllText 时文件正在被另一个进程使用

C:是否可以合并/分组字符数组中的某些元素,使其成为字符串数组?

c - 模块化程序

linux - 在 ubuntu 终端中跳转到命令历史末尾的键盘快捷键

java - 将 URL 解析为 ImageIcon 时出现 NullPointerException

java - 在这种情况下如何正确处理异常?