写入 /proc/self/fd/N 是否安全,其中 N 是进程拥有的任何文件描述符。
我的用例是 ssh 到远程计算机并猫许多远程文件到本地文件。本地文件是先前创建的并立即取消链接,以便其他用户/进程无法看到它们。
fd = open("/tmp/doo",O_CREAT|O_RDWR);
unlink("/tmp/doo");
...
...
system("ssh -n user@remotehost -- cat /remote_file >/proc/self/fd/N") // N is a valid fd number
我无法将输出重定向到 fd (cat /remote_file >&N),因为 shell 只允许使用 0-9。
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07
打开的文件由从零开始的十进制数字表示。最大可能值是实现定义的;但是,所有实现都应至少支持 0 到 9(含)以供应用程序使用。这些数字称为“文件描述符”。值 0、1 和 2 具有特殊含义和常规用途,并且由某些重定向操作隐含;它们分别称为标准输入、标准输出和标准错误。程序通常从标准输入获取输入,并将输出写入标准输出。错误消息通常写在标准错误上。重定向运算符前面可以有一位或多位数字(不允许插入字符)来指定文件描述符编号。