TimeManager
Macros | Functions | Variables
activate.c File Reference

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

Macros

#define DEFAULT_SIGNO   SIGTERM
 

Functions

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...
 

Variables

static int g_argc
 
static char ** g_argv
 
static int verbose = 0
 

Detailed Description

スケジュールを有効にするコマンドに関する実装。

Function Documentation

int activate ( int  argc,
char *  argv[] 
)

データベースにある自プロセスグループのスケジュールを有効にする。

正常に有効化ができると、開始時刻までブロックし、開始時刻とともにstdinの 内容をそのままstdoutに受け流し、終了する。
終了時刻には、自プロセスグループに指定のシグナルを送信する。
送信されるシグナルのデフォルトはSIGTERM。
開始時刻後に再度実行された場合は、終了時刻が再スケジュールされる。

Parameters
[in]argcargc値
[in]argvargv値
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]argcargc値
[in]argvargv値
[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_endverboseモード用。0はstart、1はend。
[out]成功時0、失敗時-1。