LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 700|回复: 4

下列程序为什么不能对文件读写。

[复制链接]
发表于 2005-1-20 22:24:28 | 显示全部楼层 |阅读模式
main()
{
     fd=creat(filename,FILE_MODE); /* 创建文件 */
     ...
     daemon_init(); /* daemon进程初始化函数 */
     ...
     fdd=open(filename,O_WRONLY|O_APPEND);
     write(fdd,"Hello",5)); /* 写入文件中 */

     close(fd);
     close(fdd);
     exit(0);
}
结果是能生产filename文件,但是里头没数据?(好像daemon进程也不能读一个文件。)
虽然知道daemon进程的工作原理,但对上面现象还是不太理解,请高手们指点。
发表于 2005-1-21 11:05:50 | 显示全部楼层
我试验了一下,可以的读写的!
不知道是否是你的FILE_MODE是什么,也许是它导致不能写文件!
daemon,是可以读写文件的!
你的daemon,不能读写文件(就不知道什么原因了,没有代码给我看 )!,与程序是以正常方式或者以daemon方式运行,应该是没有关系的!
回复 支持 反对

使用道具 举报

发表于 2005-1-21 12:04:42 | 显示全部楼层
Post by gotop2004
我试验了一下,可以的读写的!
不知道是否是你的FILE_MODE是什么,也许是它导致不能写文件!
daemon,是可以读写文件的!
你的daemon,不能读写文件(就不知道什么原因了,没有代码给我看 )!,与程序是以正常方式或者以daemon方式运行,应该是没有关系的!

gotop2004 键盘上的”.“和”!“被交换了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-21 19:34:14 | 显示全部楼层
Post by gotop2004
我试验了一下,可以的读写的!
不知道是否是你的FILE_MODE是什么,也许是它导致不能写文件!
daemon,是可以读写文件的!
你的daemon,不能读写文件(就不知道什么原因了,没有代码给我看 )!,与程序是以正常方式或者以daemon方式运行,应该是没有关系的!


我的怎么不行啊。

#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)        /* 新文件的存取许可权位 */

/*----------------------------------------------------------------*/
/* daemon进程初始化函数 */
int
daemon_init(const char *pname)
{
        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);      /* 创建文件 */
        close(fd);
      
        daemon_init(argv[0]);        /* daemon进程初始化函数 */
      
        write_file();
        exit(0);
}
就这段完整程序。能创建cc.log,但是里头没有数据阿?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-21 20:41:22 | 显示全部楼层
知道原因了:
chdir("/"); /* 改变工作目录 */
:beat
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表