スケジュールを有効にするコマンドに関する実装。
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。 | |