Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96877
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-24 22:04
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: C/C++

2014-07-25 16:44:02



main
|-----.....
|-----base64_init_ex
|-----tracker_mem_init
      |-----init_pthread_lock(mem_thread_lock)
      |-----init_pthread_lock(mem_file_lock)
      |-----tracker_open_changlog_file
      |-----tracker_mem_init_groups
|-----socketServer
|-----.....

点击(此处)折叠或打开

  1. int tracker_mem_init()
  2. {
  3.     int result;

  4.     if ((result=init_pthread_lock(&mem_thread_lock)) != 0)//初始化mem_thread_lock锁
  5.     {
  6.         return result;
  7.     }

  8.     if ((result=init_pthread_lock(&mem_file_lock)) != 0)//初始化mem_file_lock锁
  9.     {
  10.         return result;
  11.     }

  12.     if ((result=tracker_open_changlog_file()) != 0)//创建日志文件
  13.     {
  14.         return result;
  15.     }

  16.     return tracker_mem_init_groups(&g_groups);//初始化g_groups全局变量
  17. }
tracker_mem_init首先对锁mem_thread_lock与锁mem_file_lock进行了初始化,再调用函数tracker_open_changlog_file创建日志文件,最后调用tracker_mem_init_groups函数进行全局变量g_groups的初始化

点击(此处)折叠或打开

  1. //打开,创建日志文件
  2. static int tracker_open_changlog_file()
  3. {
  4.     char data_path[MAX_PATH_SIZE];
  5.     char filename[MAX_PATH_SIZE];

  6.     snprintf(data_path, sizeof(data_path), "%s/data", g_fdfs_base_path);// base_path/data
  7.     if (!fileExists(data_path))//创建日志文件目录
  8.     {
  9.         if (mkdir(data_path, 0755) != 0)
  10.         {
  11.             logError("file: "__FILE__", line: %d, " \
  12.                 "mkdir \"%s\" fail, " \
  13.                 "errno: %d, error info: %s", \
  14.                 __LINE__, data_path, errno, STRERROR(errno));
  15.             return errno != 0 ? errno : ENOENT;
  16.         }

  17.         TRACKER_CHOWN(data_path, geteuid(), getegid())
  18.     }

  19.     snprintf(filename, sizeof(filename), "%s/data/%s", \
  20.         g_fdfs_base_path, STORAGE_SERVERS_CHANGELOG_FILENAME);
  21.     changelog_fd = open(filename, O_WRONLY | O_CREAT | O_APPEND, 0644);//创建日志文件
  22.     if (changelog_fd < 0)
  23.     {
  24.         logError("file: "__FILE__", line: %d, " \
  25.             "open \"%s\" fail, " \
  26.             "errno: %d, error info: %s", \
  27.             __LINE__, filename, errno, STRERROR(errno));
  28.         return errno != 0 ? errno : ENOENT;
  29.     }

  30.     g_changelog_fsize = lseek(changelog_fd, 0, SEEK_END);//获取日志文件大小
  31.         if (g_changelog_fsize < 0)//获取失败
  32.     {
  33.         logError("file: "__FILE__", line: %d, " \
  34.             "lseek file \"%s\" fail, " \
  35.             "errno: %d, error info: %s", \
  36.             __LINE__, filename, errno, STRERROR(errno));
  37.         return errno != 0 ? errno : EIO;
  38.     }

  39.     TRACKER_FCHOWN(changelog_fd, filename, geteuid(), getegid())//改变文件user与group

  40.     return 0;
  41. }
tracker_open_changlog_file函数首先判断日志文件的文件夹是否存在,若不存在,则创建日志文件夹,并设定该文件夹的访问权限,修改文件夹的用户与用户组。第二步创建日志文件,如果日志文件不存在,则创建,如果存在,则从尾部进行添加,最后,读取日志文件的字节数,并保存在全局变量g_changelog_fsize中,设定日志文件的用户与用户组

tracker_mem_init_groups函数是一个tracker内存初始化的重点函数,具体分析将在下一节做详细介绍



















阅读(684) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~