- 论坛徽章:
- 0
|
源代码如下:
#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”中去了呀,我也试过将该头文件加载到此源文件中,还是报相同的错误。请各位大侠帮忙! |
|