- 论坛徽章:
- 0
|
看到一段代码,把输入,输出,错误都重定向到/dev/null- int
- daemon(nochdir, noclose)
- int nochdir, noclose;
- {
- int fd;
- switch (fork()) {
- case -1:
- return (-1);
- case 0:
- break;
- default:
- _exit(0);
- }
- if (setsid() == -1)
- return (-1);
- if (!nochdir)
- (void)chdir(”/”);
- if (!noclose && (fd = open(”/dev/null”, O_RDWR, 0)) != -1) {
- (void)dup2(fd, STDIN_FILENO);
- (void)dup2(fd, STDOUT_FILENO);
- (void)dup2(fd, STDERR_FILENO);
- if (fd > STDERR_FILENO)
- (void)close(fd);
- }
- return (0);
- }
复制代码 不太明白的是为何要(void)close(fd); ?上面的三个dup2 已经把输入,输出,错误关闭(根据apue),然后指向fd了。现在关闭fd,岂不是把输入,输出,和错误的文件描述符也都关闭了吗?那重定向就白做了,可以直接close(STDIN_FILENO);…… ?
|
|