免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1796 | 回复: 3
打印 上一主题 下一主题

请各位大哥帮忙! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-11 11:29 |只看该作者 |倒序浏览
源代码如下:
#include "test_mb.h"

#define LOCKFILE "/home/aman/test_pthread/mylock.lock"

int InitDaemon(char *pathname, int facility)
{
    int maxfd, i, ret;
    int nullFd, lock_fd;
    char buf[100];
   
    /*打开一个锁文件*/
    lock_fd = open(LOCKFILE, O_RDWR|O_CREAT, 0640);
    if(lock_fd < 0)
    {
        /*如果不能获取这个文件,说明文件不存在且无法创建这个文件*/
        cout<<"can't open file!"<<endl;
        exit(1);
    }
    /*对文件进行互斥锁定*/
    ret = flock(lock_fd, LOCK_EX|LOCK_NB);
    if(ret < 0)
    {
            /*对文件锁定失败,说明已经有一相同的守护进程在系统中运行*/
            cout<<"can't obtain the file lock."<<endl;
            exit(0);
    }
   
    ret = fork();
    if (ret < 0)
    {
        cout<<"Error in first fork!"<<endl;
        exit (-1);
    }
    else if(ret != 0)
    {
        exit (0);
    }
   
    ret = fork();
    if (ret < 0)
    {
            exit (-1);
    }
    else if(ret != 0)
    {
            exit (0);
    }
   
    setsid();
    umask(0);
    setpgrp();
    /*在锁文件中记录进程的进程号,方便系统管理*/
    sprintf(buf, "%6d\n", getpid());
    write(lock_fd, buf, strlen(buf));
   
    maxfd = sysconf(_SC_OPEN_MAX);/*获取系统配置信息*/
   
    for (i=0; i<maxfd; i++)
    {
            close(i);
    }
   
    nullFd = open("/dev/null", O_RDWR);
   
    dup2(nullFd,1);
    dup2(nullFd,2);
   
    return 0;
}

main()
{
    mb mserver;
   
    try{
        InitDaemon("my_daemon", 0);/*变成守护进程*/
        mserver.msocket();
        
        mserver.mbind();
        
        mserver.mlisten();
               
        mserver.maccept();
        
        cout<<"The connect success!"<<endl;
        
        exit(0);
    }
    catch(int i){
        cout<<"The connect fail!"<<endl;
        
        exit(0);
    }
}

编译如下:
$make all
     xlC_r  -c test_mb2.cpp
        xlC_r  -c mserver.cpp
        xlC_r  -c mclient.cpp
        xlC_r test_mb2.cpp mserver.cpp -o server
test_mb2.cpp:
mserver.cpp:
ld: 0711-317 ERROR: Undefined symbol: .flock
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: 1254-004 The error code from the last command is 8.
stop.

在AIX操作系统下为什么编译老是报flock函数未定义呢?而且我已经将该函数所需要的头文件#include <sys/file.h>;加载到“test_mb.h”中去了呀,我也试过将该头文件加载到此源文件中,还是报相同的错误。请各位大侠帮忙!

论坛徽章:
0
2 [报告]
发表于 2003-03-11 12:02 |只看该作者

请各位大哥帮忙!

没有编译环境,不知道到底是怎么回事,是不是要加库文件?

我在linux环境下flock可以直接实用。

论坛徽章:
0
3 [报告]
发表于 2003-03-11 12:36 |只看该作者

请各位大哥帮忙!

会不会是我安装AIX时出了差错呢?
但我写了一个近似相同的程序,在另外的AIX上编译运行是可以通过的呀。

论坛徽章:
0
4 [报告]
发表于 2003-03-11 12:42 |只看该作者

请各位大哥帮忙!

你可以用fcntl来代替flock使用,用的参数当然不一样了,man一下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP