at work
This commit is contained in:
81
cworker.c
81
cworker.c
@@ -4,10 +4,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <cworker.h>
|
||||
#include <logger.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <cllexer.h>
|
||||
#include <clparser.h>
|
||||
@@ -16,7 +21,13 @@
|
||||
#include <massert.h>
|
||||
#include <rcache.h>
|
||||
|
||||
int cworker_readconf(cworker_t* worker) {
|
||||
#include <config.h>
|
||||
#include <cworker.h>
|
||||
#include <logger.h>
|
||||
|
||||
int log_fd = 0;
|
||||
|
||||
static int cworker_readconf(cworker_t* worker) {
|
||||
log_debug("reading configiration");
|
||||
|
||||
int conf_fd = -1;
|
||||
@@ -47,8 +58,7 @@ int cworker_readconf(cworker_t* worker) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int cworker_readopts(cworker_t* worker, char** argv, int argc) {
|
||||
static int cworker_readopts(cworker_t* worker, char** argv, int argc) {
|
||||
log_debug("reading options");
|
||||
|
||||
cllexer_t lexer;
|
||||
@@ -60,27 +70,59 @@ int cworker_readopts(cworker_t* worker, char** argv, int argc) {
|
||||
clparser_bind(&parser, CLVALTYPE_INT, "port", (void *)&(worker->port));
|
||||
|
||||
if (clparser_parse(&parser, &argv[1], argc - 1) < 0) {
|
||||
log_error("parse args error\n");
|
||||
log_error("parse args error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cworker_openlog(cworker_t* worker) {
|
||||
log_debug("redirect output");
|
||||
|
||||
if ((log_fd = open(srv_logpath, O_WRONLY|O_APPEND|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP)) < 0) {
|
||||
log_error("open log file error %s %s", strerror(errno), srv_logpath);
|
||||
return -1;
|
||||
}
|
||||
dup2(log_fd, STDOUT_FILENO);
|
||||
dup2(log_fd, STDERR_FILENO);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cworker_writepid(cworker_t* worker) {
|
||||
log_debug("write pid file");
|
||||
int pid_fd = -1;
|
||||
if ((pid_fd = open(srv_runpath, O_WRONLY|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP)) < 0) {
|
||||
log_error("open pid file error %s %s", strerror(errno), srv_runpath);
|
||||
return -1;
|
||||
}
|
||||
if (dprintf(pid_fd, "%d", getpid()) < 0) {
|
||||
log_error("cannon write pid, error %s %s", strerror(errno), srv_runpath);
|
||||
close(pid_fd);
|
||||
return -1;
|
||||
}
|
||||
close(pid_fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const int64_t default_port = 9701;
|
||||
|
||||
int cworker_init(cworker_t* worker, char** argv, int argc) {
|
||||
if (cworker_openlog(worker) < 0) {
|
||||
log_error("openlog error");
|
||||
return -1;
|
||||
}
|
||||
log_debug("init service");
|
||||
|
||||
worker->port = default_port;
|
||||
|
||||
if (cworker_readconf(worker) < 0) {
|
||||
log_error("reading config error\n");
|
||||
log_error("reading config error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (cworker_readopts(worker, argv, argc) < 0) {
|
||||
log_error("reading config error\n");
|
||||
log_error("reading config error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -89,14 +131,23 @@ int cworker_init(cworker_t* worker, char** argv, int argc) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int cworker_detach(cworker_t* worker) {
|
||||
log_debug("detach service");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cworker_configure(cworker_t* worker) {
|
||||
log_debug("configure service");
|
||||
int childpid = -1;
|
||||
if((childpid = fork()) < 0) {
|
||||
log_error("fork error: %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (childpid == 0) {
|
||||
// child
|
||||
} else {
|
||||
// parent
|
||||
int status = 0;
|
||||
waitpid(childpid, &status, 0);
|
||||
exit(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user