服务器程序一般在后台运行,所以在启动的时候一般都会使用daemon函数让程序在后台执行。
其次为了防止进程被多次运行造成数据的不一致,服务器进程都是排他执行的,这里用到了文件锁函数flock,当一个打开的文件句柄被flock锁住,
再次启动程序的时候再调用flock尝试加锁是不成功的,这样就达到了我们程序的排他运行。
下面上代码:
main.cpp代码如下:
#include<sys/file.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <unistd.h>
#include<stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
int ret, fd;
if (argc == 2)
{
if (strcmp(argv[1], "-d") == 0)
daemon(1,1);
}
fd = open("main", O_RDONLY);
if(fd < 0)
{
printf("open error fd(%d)\n",fd);
return -1;
}
ret = flock(fd, LOCK_EX|LOCK_NB);
if(ret != 0)
{
printf("main was alread running\n");
close(fd);
return -1;
}
//以下是写的服务器应该要做的具体业务,包括socket监听,以及创建工作线程的逻辑,这里测试就只写了个while循环
while(1)
{
sleep(1);
}
ret = close(fd);
}
常见C/C++后台服务器启动流程
最新推荐文章于 2024-08-02 16:42:57 发布