スケジュールを有効にするコマンドに関する実装。
More...
#include "../include/activate.h"
#include <errno.h>
#include <limits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "../include/common.h"
#include "../include/lock.h"
#include "../include/unlock.h"
|
#define | DEFAULT_SIGNO SIGTERM |
|
|
static void | termination_handler (int sig, siginfo_t *siginfo, void *ucontext) |
| 開始時刻までの待ち時間中にシグナルで終了する場合の対策。
|
|
static int | close_unused_pipes () |
| stdin、stdoutを閉じる。 More...
|
|
static int | pass_another_data_from_stdin_to_stdout () |
| stdinから受け取ったデータをstdoutに出力する。 More...
|
|
static void | print_usage () |
| ヘルプをstderrに出力する。
|
|
static int | parse_arguments (int argc, char **argv, char *shm_name, int *d_opt, int *signo, int *verbose) |
| コマンドライン引数を解析する。 More...
|
|
static int | reset_signal_handler () |
| SIGTERM,SIGINT,SIGQUITのシグナルハンドラをデフォルトに設定する。 More...
|
|
static int | setup_signal_handler () |
| SIGTERM,SIGINT,SIGQUITのシグナルハンドラを設定する。 More...
|
|
static void | timespec_diff (struct timespec *start, struct timespec *stop, struct timespec *result) |
| Calculate diff of two struct timespec. More...
|
|
static int | wait_till_the_time (time_t time, int is_end) |
| startで指定された時刻までブロックする。 More...
|
|
int | activate (int argc, char *argv[]) |
| データベースにある自プロセスグループのスケジュールを有効にする。 More...
|
|
|
static int | g_argc |
|
static char ** | g_argv |
|
static int | verbose = 0 |
|
int activate |
( |
int |
argc, |
|
|
char * |
argv[] |
|
) |
| |
データベースにある自プロセスグループのスケジュールを有効にする。
正常に有効化ができると、開始時刻までブロックし、開始時刻とともにstdinの 内容をそのままstdoutに受け流し、終了する。
終了時刻には、自プロセスグループに指定のシグナルを送信する。
送信されるシグナルのデフォルトはSIGTERM。
開始時刻後に再度実行された場合は、終了時刻が再スケジュールされる。
- Parameters
-
[in] | argc | argc値 |
[in] | argv | argv値 |
- Returns
- 成功時は0、失敗時には1、コマンドラインオプションが不正な場合は2を返す。
static int close_unused_pipes |
( |
| ) |
|
|
static |
stdin、stdoutを閉じる。
- Returns
- 成功時は0、失敗時には-1を返す。
static int parse_arguments |
( |
int |
argc, |
|
|
char ** |
argv, |
|
|
char * |
shm_name, |
|
|
int * |
d_opt, |
|
|
int * |
signo, |
|
|
int * |
verbose |
|
) |
| |
|
static |
コマンドライン引数を解析する。
- Parameters
-
[in] | argc | argc値 |
[in] | argv | argv値 |
[out] | shm_name | '-d'オプション(データベース番号)が反映される。 |
[out] | d_opt | '-d'オプション(データベース番号)が指定された場合、1が設定される。 |
[out] | signo | '-s'オプション(終了時刻に送信されるシグナルの番号)の値が反映される。 |
[out] | verbose | '-v'オプション(verboseモード)の値が反映される。 |
- Returns
- 成功時は0、'h'オプションが指定された場合は1、不正な値が与えられた場 合は2を返す。
static int pass_another_data_from_stdin_to_stdout |
( |
| ) |
|
|
static |
stdinから受け取ったデータをstdoutに出力する。
- Returns
- 成功時は0、失敗時には-1を返す。
static int reset_signal_handler |
( |
| ) |
|
|
static |
SIGTERM,SIGINT,SIGQUITのシグナルハンドラをデフォルトに設定する。
- Returns
- 成功時は0、失敗時には-1を返す。
static int setup_signal_handler |
( |
| ) |
|
|
static |
SIGTERM,SIGINT,SIGQUITのシグナルハンドラを設定する。
- Returns
- 成功時は0、失敗時には-1を返す。
static void timespec_diff |
( |
struct timespec * |
start, |
|
|
struct timespec * |
stop, |
|
|
struct timespec * |
result |
|
) |
| |
|
static |
Calculate diff of two struct timespec.
- Parameters
-
[in] | start | |
[in] | stop | |
[out] | result | |
static int wait_till_the_time |
( |
time_t |
time, |
|
|
int |
is_end |
|
) |
| |
|
static |
startで指定された時刻までブロックする。
- Parameters
-
[in] | start | 指定時刻(time_t) |
[in] | is_end | verboseモード用。0はstart、1はend。 |
[out] | 成功時0、失敗時-1。 | |