在C中,popen是否将其结果作为文件指针写入硬盘?

In C, does popen write its result in the hard drive as a file pointer?

我创建并 运行 一个 C 程序,它使用 popen 从终端调用命令并检查 popen 返回的文件指针中的相应输出。 popen 和 pclose 处于 运行 数百万次的 while 循环中。但是,由于 popen returns 一个文件指针,我担心它会从我的 SSD 中创建和删除这些信息数百万次,并可能因此缩短 SSD 的使用寿命。(因为文件被存储在存储中)我很确定我错了,这不是它的工作原理,但我只是想确定一下。

你是对的,两个进程之间的管道不会绕过硬盘。

一些背景:在 Unix/Linux 中,文件描述符也用于所有可能不是文件的东西。

  • 网络套接字
  • 计时器
  • 设备文件(例如键盘或鼠标输入)
  • 管道(如您所见)
    • 这包括控制台标准 input/output/error,例如对于 printf(有时可以在程序不注意的情况下重定向到文件)
  • 任何其他消息队列(用于 IPC)
  • 等等

这些东西都有一些共同点:您的应用程序将需要调用内核(write() 或 read())并且可能必须等到 input/output 成为可能。

如果你同时等待多个这样的东西,只有文件描述符有一个很大的优势:你可以给内核一个你正在等待的文件描述符列表,它会醒来你的过程,如果他们中的任何一个准备好了。如果您想阅读更多相关信息,请查看 selectpoll/epoll manpages/syscalls.

如果没有这个概念,您将不得不为您正在等待的所有内容使用一个新线程,除非您同意阻塞整个程序或浪费 CPU 轮询时间 (non-blocking I/O).