写守护进程时碰到open函数的参数,没记住
今天写一个最简单的守护进程,
要成为一个守护进程,其实很简单了。主要步骤就4步:
1,创建进程。
2,父进程退出。
3,成为会话的头领进程。
4,将工作目录改成根目录,并把标准输入输出重定向到空设备。
在第4步代码:
if(!noclose) { int fd; fd=open("/dev/null",O_RDWR,0); if(fd!=-1) { dup2(fd,STDIN_FILENO); dup2(fd,STDOUT_FILENO); dup2(fd,STDERR_FILENO); if(fd>2) close(fd); } }
写入"/dev/null"的内容将会被系统丢掉,从而对stdin/stdout/stderr今次那个保护。
对参数S_RDWR,没记住。
在此列下:
O_RDONLY 只读打开。
O_WRONLY 只写打开。
O_RDWR 读、写打开。
O_APPEND 每次写时都加到文件的尾端。
O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
O_NOCTTY 如果p a t h n a m e指的是终端设备,则不将此设备分配作为此进程的控制终端。
O_NONBLOCK 如果p a t h n a m e指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
O_SYNC 使每次w r i t e都等到物理I / O操作完成。
这些控制字都是通过“或”符号分开(|)