日期:2014-05-16  浏览次数:20570 次

一些linux下c程序的不解
	iFd = open("/dev/tty", O_RDWR);
(void)ioctl(iFd, O_NOCTTY, 0);
(void)close(iFd);
for (i=0; i<3; i++)
close(i);
i = fork();
if (i < 0)
exit(1);
if (i)
exit(0);


以上代码是我从别人程序里看到的,他每个程序的开头都有这段代码
我只能明白这些代码的字面意思,但是实在不明白这样做的用意

<1>打开了TTY设置了NOCTTY(不把这个设备用作控制终端)
<2>关闭标准输入,标准输出和标准错误
<3>fork后关闭父进程和出错进程

如果不做这些处理会有什么隐患?
本人初学,请各位不吝赐教
------解决方案--------------------
是为了做daemon守护进程吧

首先让进程没有终端,然后fork取子进程,使子进程不会成为进程组首进程, 这样子进程就是个守护进程
------解决方案--------------------
O_NOCTTY 如果p a t h n a m e指的是终端设备,则不将此设备分配作为此进程的控制终端