|
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構造体を示すポインタ。 |
1.8.10