1

我正在使用一些外部二进制文件编写一个 C 程序来实现计划的目标。我需要运行一个命令给我一个输出,然后我需要处理它,然后作为输入输入另一个程序。我正在使用 popen,但想知道这是否与使用 KornShell (ksh) 临时文件相同。

例如:

touch myfile && chmod 700
cat myfile > /tmp/tempfile 
process_file < /tmp/tempfile  && rm /tmp/tempfile

由于这会创建一个可由 root 读取的临时文件,如果在 C 中使用 popen,知道管道也是文件,它会是一样的吗?或者假设操作系统(OS)不允许任何其他进程读取您的管道是否安全?

4

1 回答 1

1

您说“这会创建一个 root 可以读取的临时文件”,这意味着您正在尝试以 root 用户无法读取的方式传输数据。这不可能; 一般来说,root 用户完全控制系统,因此可以读取系统上的任何数据,无论它是否在临时文件中。即使在单个进程中,root 用户也可以读取该进程的内存。

如果使用popen(),则文件系统上不会有该文件的条目;它创建了一个管道,它就像一个文件,但实际上并不将该数据写入磁盘,而是在两个程序之间传递它。

它会有一个文件描述符;根据系统的不同,截取该数据可能更容易或更难,但始终可以这样做。例如,在 Linux 上,您只需/proc/<pid>/fd/查找所有打开的文件描述符并操作它们(读取或写入它们)。

于 2013-01-02T23:23:57.997 回答