常见C/C++后台服务器启动流程

来源:互联网 发布:网络策略游戏 编辑:程序博客网 时间:2024/06/03 17:21
服务器程序一般在后台运行,所以在启动的时候一般都会使用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);}