TimeManager
Functions
common.c File Reference

TimeManagerの共通部分に関する実装 More...

#include "../include/common.h"
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>

Functions

static int check_sched_db_file (const char *path)
 ファイルの存在を確認する。ファイルが存在しない場合は作成する。 More...
 
int check_sched_conflict (struct schedule *sched, struct schedule **scheds, size_t len)
 スケジュールが、スケジュール群の中のスケジュールと重複していないか確認する。 More...
 
void cleanup_schedules (struct schedule **scheds, size_t len)
 スケジュール構造体群のメモリをそれぞれ解放する。 More...
 
static int compare_start_val (const void *a, const void *b)
 qsort()用の関数。スケジュール構造体のstart値で昇順ソートする。
 
int create_schedule (pid_t pgid, int lock, pid_t terminator, time_t start, unsigned int duration, const char *caption, struct schedule **sched)
 引数を元にスケジュール構造体を作成する。 More...
 
void debug_schedule (const char *comment, struct schedule **scheds, size_t len)
 スケジュール群の内容を、コメントとともにstderrに出力する。 More...
 
int get_env (char *sem_name, char *shm_name)
 環境変数を解析する。 More...
 
int find_sched_by_pgid (pid_t pgid, struct schedule **scheds, size_t len, struct schedule **sched)
 与えられたスケジュール群から、指定されたpgid値を持つスケジュールを見つける。 More...
 
size_t generate_unoccupied_scheds_from_scheds (struct schedule **scheds, size_t len, struct schedule **unoccupied_scheds, size_t max_len, time_t range_start, unsigned int range_dur, const char *caption)
 与えられたスケジュール群の中から、空き時間のスケジュール群を作成する。 More...
 
static int get_shared_memory_address (const char *path, size_t size, char **addr)
 共有メモリのアドレスを取得する。 More...
 
int load_schedules (const char *shm_path, size_t shm_size, struct schedule **scheds, size_t scheds_len, size_t *loaded_len)
 共有メモリからスケジュールを読み込み、スケジュール構造体を作成する。 More...
 
int save_schedules (const char *path, const size_t size, struct schedule **scheds, size_t len)
 スケジュール群を決められた書式で共有メモリに書き込む。 More...
 
void sort_schedules (struct schedule **scheds, size_t len)
 schedule構造体のstart値で昇順ソートする。 More...
 
int string_to_schedule (const char *str, struct schedule **sched)
 文字列の内容からスケジュール構造体を作成する。 More...
 

Detailed Description

TimeManagerの共通部分に関する実装

Function Documentation

int check_sched_conflict ( struct schedule sched,
struct schedule **  scheds,
size_t  len 
)

スケジュールが、スケジュール群の中のスケジュールと重複していないか確認する。

Parameters
[in]sched重複を確認するスケジュール
[in]scheds確認される側のスケジュール群
[in]lenscheds配列の個数
Returns
重複がない場合は0を、重複がある場合は1を返す。
static int check_sched_db_file ( const char *  path)
static

ファイルの存在を確認する。ファイルが存在しない場合は作成する。

Parameters
[in]pathスケジュールデータベースのパス
Returns
成功時0、失敗時-1。
void cleanup_schedules ( struct schedule **  scheds,
size_t  len 
)

スケジュール構造体群のメモリをそれぞれ解放する。

Parameters
[in]scheds解放するメモリへのポインタを持つ配列。
[in]lenschedsの配列数。
int create_schedule ( pid_t  pgid,
int  lock,
pid_t  terminator,
time_t  start,
unsigned int  duration,
const char *  caption,
struct schedule **  sched 
)

引数を元にスケジュール構造体を作成する。

Attention
戻り値のスケジュール構造体は、メモリを動的に確保しているので、 不要時にはメモリの解放をする必要がある。
Parameters
[in]pgid実行するプロセスが属するプロセスグループID
[in]lockロックの取得状況(0 or 1)
[in]terminator終了時刻にシグナルを送信するプロセスのID
[in]start開始時刻
[in]duration継続時間(sec)
[in]captionスケジュールの簡単な説明。
[out]sched作成したschedule構造体を示すポインタ
Precondition
captionの文字数は、英数時で、MAX_CAPTION_LEN-1 以下である必要がある。
Returns
成功時は0、失敗時には-1を返す。
void debug_schedule ( const char *  comment,
struct schedule **  scheds,
size_t  len 
)

スケジュール群の内容を、コメントとともにstderrに出力する。

書式:comment scheds[x] pgid:xxxx start:xxxxxx dur:xxx cap:xxxxx

Parameters
[in]commnetコメント
[in]scheds書き出すスケジュール群。
[in]lenschedsの配列数。
int find_sched_by_pgid ( pid_t  pgid,
struct schedule **  scheds,
size_t  len,
struct schedule **  sched 
)

与えられたスケジュール群から、指定されたpgid値を持つスケジュールを見つける。

Attention
同じpgid値を持つスケジュールが複数ある場合の動作は考慮していない。
Parameters
[in]pgid見つけるスケジュールのpgid値
[in]scheds対象のスケジュール群
[in]lenschedsの配列数
[out]sched見つかったスケジュール構造体が反映される。
Returns
見つかった場合0、見つからない場合-1。
size_t generate_unoccupied_scheds_from_scheds ( struct schedule **  scheds,
size_t  len,
struct schedule **  unoccupied_scheds,
size_t  max_len,
time_t  range_start,
unsigned int  range_dur,
const char *  caption 
)

与えられたスケジュール群の中から、空き時間のスケジュール群を作成する。

Parameters
[in]scheds対象となるスケジュール群
[in]lenschedsの配列数
[out]unoccupied_scheds作成した空きスケジュール群を保存する配列。 あらかじめメモリを確保しておく必要がある。
[in]max_lenunoccupied_schedsの配列数。
[in]range_start空き時間を検索する開始時刻。
[in]range_dur空き時間検索範囲。(sec)
[in]caption作成した空きスケジュール群のcaption値にセットされる値。
Returns
作成した空きスケジュールの数。
int get_env ( char *  sem_name,
char *  shm_name 
)

環境変数を解析する。

Parameters
[out]sem_nameセマフォ名。環境変数(データベース番号)が反映される。
[out]shm_name共有メモリ名。環境変数(データベース番号)が反映される。
Returns
成功時は0、失敗時には-1を返す。
static int get_shared_memory_address ( const char *  path,
size_t  size,
char **  addr 
)
static

共有メモリのアドレスを取得する。

Parameters
[in]path共有メモリのパス。
[in]size共有メモリのサイズ。
[out]addr取得したアドレスが反映される。
Returns
成功した場合は0を、失敗した場合は-1を返す。
int load_schedules ( const char *  shm_path,
size_t  shm_size,
struct schedule **  scheds,
size_t  scheds_len,
size_t *  loaded_len 
)

共有メモリからスケジュールを読み込み、スケジュール構造体を作成する。

共有メモリからスケジュールを読込、スケジュール構造体を作成する。

Parameters
[in]shm_path共有メモリのパス。
[in]shm_size共有メモリのサイズ。
[out]scheds読み込んだスケジュール構造体を保存する配列。あらかじめ メモリを確保しておく必要がある。
[in]scheds_lenschedsの配列数。
[out]loaded_len読み込んだスケジュール数が反映される。
Returns
成功時は0、失敗時は-1返す。
int save_schedules ( const char *  path,
const size_t  size,
struct schedule **  scheds,
size_t  len 
)

スケジュール群を決められた書式で共有メモリに書き込む。

Parameters
[in]path共有メモリのパス。
[in]size共有メモリのサイズ。
[in]scheds書き込むスケジュール構造体の配列。
[in]lenschedsの配列数。
Returns
成功した場合は0を、失敗した場合は-1を返す。
void sort_schedules ( struct schedule **  scheds,
size_t  len 
)

schedule構造体のstart値で昇順ソートする。

Parameters
int string_to_schedule ( const char *  str,
struct schedule **  sched 
)

文字列の内容からスケジュール構造体を作成する。

Attention
戻り値のスケジュール構造体は、メモリを動的に確保しているので、 不要時にはメモリの解放をする必要がある。
Parameters
[in]strスケジュールを表す文字列。
[out]sched作成したschedule構造体を示すポインタ。
Returns
成功した場合は0を、失敗した場合は-1を返す。