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
|-----.....
-
int tracker_mem_init()
-
{
-
int result;
-
-
if ((result=init_pthread_lock(&mem_thread_lock)) != 0)//初始化mem_thread_lock锁
-
{
-
return result;
-
}
-
-
if ((result=init_pthread_lock(&mem_file_lock)) != 0)//初始化mem_file_lock锁
-
{
-
return result;
-
}
-
-
if ((result=tracker_open_changlog_file()) != 0)//创建日志文件
-
{
-
return result;
-
}
-
-
return tracker_mem_init_groups(&g_groups);//初始化g_groups全局变量
-
}
tracker_mem_init首先对锁mem_thread_lock与锁mem_file_lock进行了初始化,再调用函数tracker_open_changlog_file创建日志文件,最后调用tracker_mem_init_groups函数进行全局变量g_groups的初始化
-
//打开,创建日志文件
-
static int tracker_open_changlog_file()
-
{
-
char data_path[MAX_PATH_SIZE];
-
char filename[MAX_PATH_SIZE];
-
-
snprintf(data_path, sizeof(data_path), "%s/data", g_fdfs_base_path);// base_path/data
-
if (!fileExists(data_path))//创建日志文件目录
-
{
-
if (mkdir(data_path, 0755) != 0)
-
{
-
logError("file: "__FILE__", line: %d, " \
-
"mkdir \"%s\" fail, " \
-
"errno: %d, error info: %s", \
-
__LINE__, data_path, errno, STRERROR(errno));
-
return errno != 0 ? errno : ENOENT;
-
}
-
-
TRACKER_CHOWN(data_path, geteuid(), getegid())
-
}
-
-
snprintf(filename, sizeof(filename), "%s/data/%s", \
-
g_fdfs_base_path, STORAGE_SERVERS_CHANGELOG_FILENAME);
-
changelog_fd = open(filename, O_WRONLY | O_CREAT | O_APPEND, 0644);//创建日志文件
-
if (changelog_fd < 0)
-
{
-
logError("file: "__FILE__", line: %d, " \
-
"open \"%s\" fail, " \
-
"errno: %d, error info: %s", \
-
__LINE__, filename, errno, STRERROR(errno));
-
return errno != 0 ? errno : ENOENT;
-
}
-
-
g_changelog_fsize = lseek(changelog_fd, 0, SEEK_END);//获取日志文件大小
-
if (g_changelog_fsize < 0)//获取失败
-
{
-
logError("file: "__FILE__", line: %d, " \
-
"lseek file \"%s\" fail, " \
-
"errno: %d, error info: %s", \
-
__LINE__, filename, errno, STRERROR(errno));
-
return errno != 0 ? errno : EIO;
-
}
-
-
TRACKER_FCHOWN(changelog_fd, filename, geteuid(), getegid())//改变文件user与group
-
-
return 0;
-
}
tracker_open_changlog_file函数首先判断日志文件的文件夹是否存在,若不存在,则创建日志文件夹,并设定该文件夹的访问权限,修改文件夹的用户与用户组。第二步创建日志文件,如果日志文件不存在,则创建,如果存在,则从尾部进行添加,最后,读取日志文件的字节数,并保存在全局变量g_changelog_fsize中,设定日志文件的用户与用户组
tracker_mem_init_groups函数是一个tracker内存初始化的重点函数,具体分析将在下一节做详细介绍
阅读(678) | 评论(0) | 转发(0) |