|
|
daemon进程中文件读写注意的一些问题 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
完整程序是这样的: /*******************************************************/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <signal.h> #include <string.h> #include <stdio.h> #include <syslog.h> #include <stdlib.h> #include <unistd.h>
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) /* 新文件的存取许可权位 */
int daemon_init(const char *pname) /* daemon进程初始化函数 */ { int i; pid_t pid;
if((pid=fork())!=0) exit(0); setsid(); /* 进程成为会话首进程,不再有控制终端 */ signal(SIGHUP,SIG_IGN); /* 忽略SIGHUP信号并再次fork */ if((pid=fork())!=0) exit(0);
chdir("/"); /* 改变工作目录 */ umask(0); /* 清文件创建屏蔽字 */
for(i=0;i<64;i++) /* 关闭所有打开的文件描述符 */ close(i); openlog(pname,LOG_PID,0); }
void write_file(void) { int fdd;
fdd=open("cc.log",O_WRONLY|O_APPEND); write(fdd,"Hello",5); /* 写入文件中 */
close(fdd); }
int main(int argc, char **argv) { int fd;
fd=creat("cc.log",FILE_MODE); /* 创建文件 */
daemon_init(argv[0]); /* daemon进程初始化函数 */
write_file(); close(fd); exit(0); } /****************************************************/ 结果是能生产"cc.log"文件,但是里头没数据。 发在网上,很多朋友给出了意见。 有人说:“fd = open("cc.log", O_CREAT | O_RDWR, FILE_MODE) 这样创建文件, 再write 就可以了啊。”;有人说:“create创建的文件还没释放,要先close(fd),下面的open实际应该没成功”;还有人说可能是FILE_MODE的问题。 最后发现,使daemon_init()中“chdir("/");/* 改变工作目录 */”使得下面的open函数找不到文件。改正之后就好了。

|
|
相关文章:相关软件: |
|