TimeManager
|
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... | |
TimeManagerの共通部分に関する実装
スケジュールが、スケジュール群の中のスケジュールと重複していないか確認する。
[in] | sched | 重複を確認するスケジュール |
[in] | scheds | 確認される側のスケジュール群 |
[in] | len | scheds配列の個数 |
|
static |
ファイルの存在を確認する。ファイルが存在しない場合は作成する。
[in] | path | スケジュールデータベースのパス |
void cleanup_schedules | ( | struct schedule ** | scheds, |
size_t | len | ||
) |
スケジュール構造体群のメモリをそれぞれ解放する。
[in] | scheds | 解放するメモリへのポインタを持つ配列。 |
[in] | len | schedsの配列数。 |
int create_schedule | ( | pid_t | pgid, |
int | lock, | ||
pid_t | terminator, | ||
time_t | start, | ||
unsigned int | duration, | ||
const char * | caption, | ||
struct schedule ** | sched | ||
) |
引数を元にスケジュール構造体を作成する。
[in] | pgid | 実行するプロセスが属するプロセスグループID |
[in] | lock | ロックの取得状況(0 or 1) |
[in] | terminator | 終了時刻にシグナルを送信するプロセスのID |
[in] | start | 開始時刻 |
[in] | duration | 継続時間(sec) |
[in] | caption | スケジュールの簡単な説明。 |
[out] | sched | 作成したschedule構造体を示すポインタ |
void debug_schedule | ( | const char * | comment, |
struct schedule ** | scheds, | ||
size_t | len | ||
) |
スケジュール群の内容を、コメントとともにstderrに出力する。
書式:comment scheds[x] pgid:xxxx start:xxxxxx dur:xxx cap:xxxxx
[in] | commnet | コメント |
[in] | scheds | 書き出すスケジュール群。 |
[in] | len | schedsの配列数。 |
int find_sched_by_pgid | ( | pid_t | pgid, |
struct schedule ** | scheds, | ||
size_t | len, | ||
struct schedule ** | sched | ||
) |
与えられたスケジュール群から、指定されたpgid値を持つスケジュールを見つける。
[in] | pgid | 見つけるスケジュールのpgid値 |
[in] | scheds | 対象のスケジュール群 |
[in] | len | schedsの配列数 |
[out] | sched | 見つかったスケジュール構造体が反映される。 |
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 | ||
) |
与えられたスケジュール群の中から、空き時間のスケジュール群を作成する。
[in] | scheds | 対象となるスケジュール群 |
[in] | len | schedsの配列数 |
[out] | unoccupied_scheds | 作成した空きスケジュール群を保存する配列。 あらかじめメモリを確保しておく必要がある。 |
[in] | max_len | unoccupied_schedsの配列数。 |
[in] | range_start | 空き時間を検索する開始時刻。 |
[in] | range_dur | 空き時間検索範囲。(sec) |
[in] | caption | 作成した空きスケジュール群のcaption値にセットされる値。 |
int get_env | ( | char * | sem_name, |
char * | shm_name | ||
) |
環境変数を解析する。
[out] | sem_name | セマフォ名。環境変数(データベース番号)が反映される。 |
[out] | shm_name | 共有メモリ名。環境変数(データベース番号)が反映される。 |
|
static |
共有メモリのアドレスを取得する。
[in] | path | 共有メモリのパス。 |
[in] | size | 共有メモリのサイズ。 |
[out] | addr | 取得したアドレスが反映される。 |
int load_schedules | ( | const char * | shm_path, |
size_t | shm_size, | ||
struct schedule ** | scheds, | ||
size_t | scheds_len, | ||
size_t * | loaded_len | ||
) |
共有メモリからスケジュールを読み込み、スケジュール構造体を作成する。
共有メモリからスケジュールを読込、スケジュール構造体を作成する。
[in] | shm_path | 共有メモリのパス。 |
[in] | shm_size | 共有メモリのサイズ。 |
[out] | scheds | 読み込んだスケジュール構造体を保存する配列。あらかじめ メモリを確保しておく必要がある。 |
[in] | scheds_len | schedsの配列数。 |
[out] | loaded_len | 読み込んだスケジュール数が反映される。 |
int save_schedules | ( | const char * | path, |
const size_t | size, | ||
struct schedule ** | scheds, | ||
size_t | len | ||
) |
スケジュール群を決められた書式で共有メモリに書き込む。
[in] | path | 共有メモリのパス。 |
[in] | size | 共有メモリのサイズ。 |
[in] | scheds | 書き込むスケジュール構造体の配列。 |
[in] | len | schedsの配列数。 |
void sort_schedules | ( | struct schedule ** | scheds, |
size_t | len | ||
) |
schedule構造体のstart値で昇順ソートする。
int string_to_schedule | ( | const char * | str, |
struct schedule ** | sched | ||
) |
文字列の内容からスケジュール構造体を作成する。
[in] | str | スケジュールを表す文字列。 |
[out] | sched | 作成したschedule構造体を示すポインタ。 |