APUE(图13.1)表示,为了创建守护进程,在关闭所有打开的文件描述符后,将描述符0,1,2附加到/dev/url,如下所示:

/*
* Close all open file descriptors.
*/
if (rl.rlim_max == RLIM_INFINITY)
rl.rlim_max = 1024;
for (i = 0; i < rl.rlim_max; i++)
close(i);
/*
* Attach file descriptors 0, 1, and 2 to /dev/null.
*/
fd0 = open("/dev/null", O_RDWR);
fd1 = dup(0);
fd2 = dup(0);

我的问题是:是否有必要附加文件描述符0、1、2,或者它们都可以保持未附加?

推荐答案

如果任何东西试图访问这些描述符中的任何一个,您都会遇到错误,这是难以避免的.如果您可以完全控制所有读写,则没有必要;但打开文件描述符比确保任何地方都没有人try 打印消息、发出错误消息或诊断消息或读取标准输入容易way.

Linux相关问答推荐

Bash脚本用于在远程工作后关闭用户会话

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

如何在不使用LD_LIBRARY_PATH或RPATH的情况下运行链接到共享库的二进制文件?

Linux 上 Ada 任务优先级的语义是什么?

如何在我的 PC 上配置 GitLab 和 GitHub ssh 密钥

如何在具有多种可能性的linux shell中获取最大值和最小值?

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

如何使用 sed 和 awk 命令提取模式?

linux 提取字符串中可能是第二常见模式的部分

std::system 使用什么Shell?

是否可以在 XTerm 或 Konsole 中使 stdout 和 stderr 输出具有不同的 colored颜色 ?

使用 AWS CLI 进行 Bash - 无法找到凭证

BASEDIR 环境变量未正确定义

如何测试是否存在两个文件?

size_t 和 off_t 的用法有什么区别?

如何在没有空格的情况下打印 awk?

错误:ld.so:无法预加载对象 LD_PRELOAD:忽略

从线程内Forking 是否安全?

初学者如何在 Linux 中开始使用 Mono?

Bash:在文件中的特定位置插入一行