cmn-clibは、オープンソースのC言語用関数ライブラリで、Windows/Linuxのマルチ環境で開発/利用が可能です。
日々の開発を通じて共通化してきた関数群をオープンソースのライブラリとしてまとめたものですが、継続して開発を行っているため、関数の追加や変更が発生する可能性は大いにあり、現在はベータ版となります。
開発/利用環境
- Windows
開発ツールはVisualStudio(2019)もしくはEclipse(MinGw)。
DLLもしくはStatic-libとしてリンクして利用可能。
※DLL生成は現在未対応です。DLL生成が必要な場合はDLL用にビルド設定を変える必要があります。 - Linux
開発ツールはgccおよびmakeです。
利用はarからのスタティックリンクです。
そのうちsoとしてダイナミックリンク可能にする予定ですが、まだ出来ていません。 - MacOS
自分がMac使ってないので対象外ですが、gcc+makeで標準C/C++ライブラリくらいしか使っていないのでMacでもビルドできると思います。
あ、一部ファイル操作かソケット通信でLinux用ライブラリ使ってしまっているかもしれません。
cmn-clib の利用方法
バイナリ配布を利用する
コンパイル済みのバイナリは、Windows/Linuxの64bit向けのみとなります。
バイナリダウンロード / Download
version | target | Download URL |
---|---|---|
0.1 | Windows x64 | https://ityorozu.net/dev/cmn-clib_v0.1/bin/cmn-clib_v0.1_bin_win-x64.zip |
0.1 | Linux x64 | https://ityorozu.net/dev/cmn-clib_v0.1/bin/cmn-clib_v0.1_bin_linux-x64.tar.gz |
0.2 | Windows x64 | https://ityorozu.net/dev/cmn-clib_v0.2/bin/cmn-clib_v0.2_bin_win-x64.zip |
0.2 | Linux x64 | https://ityorozu.net/dev/cmn-clib_v0.2/bin/cmn-clib_v0.2_bin_linux-x64.tar.gz |
スタティックリンク / static link
バイナリをダウンロードして任意の場所に解凍し、ご自分のプログラムに組み込んでください。
- inc:ヘッダーファイルです。
- cmn-clib.lib(Windowsの場合):スタティックリンクライブラリです。
- libcmn-clib.a(Linuxの場合):スタティックリンクライブラリです。
Visual Studio の場合
プロジェクトのプロパティを開き、以下を設定します。
- [C/C++] -> [全般] -> [追加のインクルードディレクトリ]に、解凍したcmn-clibの「inc」ディレクトリのパスを追加。
- [リンカー] -> [入力] -> [追加の依存ファイル]に、解凍したcmn-clibの「cmn-clib.lib」のパスを追加。
- プログラムソースコードに
#include<cmnclib.h>
を追加する。
gcc の場合
プログラムソースコードに #include<cmnclib.h>
を追加し、以下の要領でビルドしてください。
$ gcc YourSource.c -I/{解凍場所}/inc -L/{解凍場所} -lcmn-clib -pthread
「YourSource.c」はご自分のプログラムです。最後に「-pthread」をつけているのは、cmn-clibではマルチスレッド機能を提供しており、Linuxのマルチスレッドライブラリを使っているためです。
マルチスレッド機能を使わなくてもリンクするために必須になってしまうので、イマイチな部分ですね。今後なんらか対策を考えようと思います。
ダイナミックリンク
cmn-clibはまだダイナミックリンクに対応できていません。今後対応する予定です。
ソースコードからビルドする
ソースコードはgithubで管理しています。
VisualStudioの場合
VisualStudioのソリューションファイル「cmn-clib.sln」がありますので、git clone もしくはソースコードをダウンロードしてもらえば、そのままビルド出来ます。
ビルドターゲットを「static-lib」にしてcmn-clibプロジェクトをビルドすると、ライブラリが生成されます。尚、ビルドターゲット「Debug」と「Release」はcmn-clibのユニットテストを実行するEXEが生成されるビルドですので、ライブラリを生成したい場合は「static-lib」をビルドしてください。
cmn-clibの動作確認をする場合は、ビルドターゲットを「Debug」か「Release」にして、cmn-clibをF5で実行してください。
以降、ご自分のプログラムにcmn-clibを組み込む方法はバイナリ配布の手順と同様となります。
Linuxの場合
Makefileを用意していますので、git cloneもしくはソースコードダウンロードから「make」でビルド出来ます。
$ git clone https://github.com/kumagaihs/cmn-clib.git
$ cd cmn-clib/cmn-clib
$ make
# 動作確認
$ build/test_main
以降、ご自分のプログラムにcmn-clibを組み込む方法はバイナリ配布の手順と同様となります。
サブプロジェクトの概要
cmn-clibはいくつかのサブプロジェクトを内包しています。
メインとなるのは「cmn-clib」で、こちらがC言語ライブラリです。
- cmn-clib
C言語用ライブラリ。「extern “C”」すればC++から利用することも可能です。(当たり前か)
VisualStudio用のプロジェクトファイルとEclipse(MinGw)向けのプロジェクトファイルが同居しているのでどちらでも開発可能です。
ただし主にWindowsではVisualStudio、Linuxではgccでビルドしているので、MinGwでは警告が出る場合があるかもしれません。
(たまにMinGwでビルドしてみて気が付いたら直していますが)
なのでVisualStudioもしくはLinuxでの利用がおすすめです。
ビルド方法・利用方法はソースコード内の/cmn-clib/readme.txt
を参照してください。
(ソースコードはgithub管理です。下にリンクあります。) - cmn-cpplib
C++用ライブラリ。ただまだ作りはじめでほとんど中身空っぽです。 - cmn-tools CUIベースのツール群です。
こちらはC++で開発しています。
cmn-clib(C言語ライブラリ)の詳細仕様
API-Documents
APIドキュメントはDoxygenで生成しています。
関数一覧
cmn-clibが持つ関数の一覧です。詳細はAPIドキュメントをご参照ください。
関数名 | 概要 |
---|---|
CmnData.h(データ型・コレクション) | |
CmnDataList_Create | 単方向リスト作成 |
CmnDataList_Free | 単方向リスト解放 |
CmnDataList_Add | 単方向リスト要素追加 |
CmnDataList_Get | 単方向リスト要素取得 |
CmnDataStack_Create | スタック作成 |
CmnDataStack_Free | スタック解放 |
CmnDataStack_Pop | スタックから要素取得 |
CmnDataBuffer_Create | 自動領域拡張バッファ作成 |
CmnDataBuffer_Append | 自動領域拡張バッファへのデータ追加 |
CmnDataBuffer_Set | 自動領域拡張バッファへのデータ設定 |
CmnDataBuffer_Delete | 自動領域拡張バッファのデータ削除 |
CmnDataBuffer_Free | 自動領域拡張バッファの解放 |
CmnString.h(文字列操作) | |
CmnString_RTrim | 右側トリム |
CmnString_LTrim | 左側トリム |
CmnString_Trim | トリム |
CmnString_Replace | 文字列置換 |
CmnString_ReplaceNew | 文字列置換(動的メモリ確保) |
CmnString_StrCatNew | 文字列連結(動的メモリ確保) |
CmnString_StrCopyNew | 文字列コピー(動的メモリ確保) |
CmnString_StrEol | 改行コード(End Of Line:CRLF or LF or CR)を検索する。 |
CmnString_Split | 文字列分割(into配列) |
CmnString_SplitAsList | 文字列分割(into CmnDataList) |
CmnString_SplitLine | 文字列を改行コード(CRLF/LF/CRの何れか)で分解してlistに格納する。 |
CmnString_Lpad | 文字列の左側パディング |
CmnString_Rpad | 文字列の右側パディング |
CmnString_StartWith | 対象文字列が特定文字列で始まっているかチェックする |
CmnString_EndWith | 対象文字列が特定文字列で終わっているかチェックする |
CmnString_IndexOf | strのなかで最初に出現するmarkの位置(先頭文字をゼロとした文字数)を返す。 |
CmnString_LastIndexOf | strのなかで最後に出現するmarkの位置(先頭文字をゼロとした文字数)を返す。 |
CmnStringList_Create | 文字列リスト作成 |
CmnStringList_Free | 文字列リスト解放 |
CmnStringList_Add | 文字列リスト要素追加 |
CmnStringList_Get | 文字列リスト要素取得 |
CmnStringBuffer_Create | 文字列バッファ作成 |
CmnStringBuffer_Append | 文字列バッファへのデータ追加 |
CmnStringBuffer_Set | 文字列バッファへのデータ設定 |
CmnStringBuffer_SetByCmnDataBuffer | 文字列バッファへのデータ設定(by CmnDataBuffer) |
CmnStringBuffer_Free | 字列バッファの解放 |
CmnTime.h(日付・時刻) | |
CmnTimeDateTime_SetNow | 現在日時を取得する |
CmnTimeDateTime_Set | 日時情報を設定する |
CmnTimeDateTime_SetBySerial | 日時情報を設定する |
CmnTimeDateTime_Add | 日時情報を設定する |
CmnTimeDateTime_AddBySerial | 日時情報を設定する |
CmnTimeDateTime_ToString | CmnTimeDateTimeを文字列に変換する |
CmnTime_Format | 現在時刻文字列生成 |
CmnTime_Sleep | 指定ミリ秒スリープする |
CmnFile.h(ファイル操作) | |
CmnFile_ReadAllText | ファイルをテキストデータとして全て読み込む |
CmnFile_ReadAll | ファイルを全て読み込む |
CmnFile_WriteNew | データをファイルに書き込む。ファイルがなければ新規作成。ファイルがあれば上書き。 |
CmnFile_WriteHead | データをファイルの先頭に追加する。ファイルがなければ新規作成。 |
CmnFile_WriteTail | データをファイルの末尾に追加する。ファイルがなければ新規作成。 |
CmnFile_Remove | ファイルを削除する |
CmnFile_List | path直下のファイル/ディレクトリ一覧を取得する。 |
CmnFile_ToAbsolutePath | 絶対パスを取得する |
CmnFile_GetCurrentDirectory | カレントディレクトリを取得する |
CmnFile_Exists | pathが実在するかチェックする |
CmnFile_GetFileInfo | ファイル情報を取得する |
CmnLog.h(ログ出力) | |
CmnLog_Init | 標準ログ出力関数初期化処理 |
CmnLog_End | 標準ログ出力共通関数終了処理 |
CmnLog_Put | 標準ログ出力 |
CmnLog_PutByCode | メッセージコードによる標準ログ出力 |
CmnLog_InitCmnClibLog | cmn-clib内部ログ出力設定 |
CmnLog_EndCmnClibLog | cmn-clib内部ログ出力終了 |
CmnLog_PutCmnClibLog | cmn-clib内部ログ出力 |
CmnLogEx_Create | 拡張ログ出力関数初期化処理 |
CmnLogEx_Free | 拡張ログ出力共通関数終了処理 |
CmnLogEx_Put | 拡張ログ出力 |
CmnLogEx_PutByCode | メッセージコードによる拡張ログ出力 |
CmnLogMessage_Create | ログメッセージ定義ファイル読み込み |
CmnLogMessage_Free | ログメッセージリスト解放処理 |
CmnLogMessage_Get | ログメッセージ取得 |
CmnConf.h(設定ファイル) | |
CmnConf_GetEnv | 環境変数取得 |
CmnConfProperty_Load | プロパティリスト取得 |
CmnConfProperty_Free | プロパティ値取得 |
CmnConfProperty_GetValue | プロパティ値取得 |
CmnThread.h(マルチスレッド) | |
CmnThread_Init | スレッドオブジェクト初期化 |
CmnThread_Start | スレッド処理開始 |
CmnThread_Join | スレッド処理待ち合わせ |
CmnThread_Kill | スレッド強制終了 |
CmnThreadMutex_Create | Mutex作成 |
CmnThreadMutex_Lock | Mutexロック取得 |
CmnThreadMutex_UnLock | Mutexロック解除 |
CmnThreadMutex_Free | Mutex破棄 |
CmnNet.h(ネットワーク通信) | |
CmnNetSocket_StartServer | TCP/IP待ち受けサーバー起動 |
CmnNetSocket_EndServer | TCP/IPサーバーを終了する |
CmnNetSocket_NoSessionRequest | セッションレスTCP/IPリクエスト送信 |
CmnNetSocket_ReceiveAll | ソケットからすべてのデータを読み込む |
CmnNetSocket_SendAll | ソケットへすべてのデータを書き込む |
CmnNetSocket_ToSocketAddress | IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する |
CmnNetHttp_GetRequest | HTTPのGETリクエストを送信する |
CmnNetHttp_PostRequest | HTTPのPOSTリクエストを送信する |
CmnTest.h(ユニットテスト) | |
CmnTest_InitializeTestPlan | テストプランを作成する |
CmnTest_AddTestCase | テストプランにテストケースを追加する |
CmnTest_Run | テストを実行する |
CmnTest_DestroyTest | テストプランを破棄する |
CmnTest_AssertNumber | 数値データのテストを行う |
CmnTest_AssertString | 文字列データのテストを行う |
CmnTest_AssertData | バイナリデータのテストを行う |
CmnTest_AssertNG | テストを失敗にする |
cmn-tools(CUIツール群)詳細
cmn-toolsは、cmn-clibを使って開発されたコマンドラインツール群です。
cmn-toolsの各機能はサブコマンドとして実装されており、使用方法は以下のようになります。
$ cmn-tools サブコマンド名 [オプション]
サブコマンド一覧
サブコマンド名 | 説明 |
---|---|
help | ヘルプを標準出力に出力します。 <<< command >>> help [command-name] <<< option >>> command-name 詳細を知りたいコマンド名。省略した場合はコマンドの一覧を表示する |
getclip | クリップボードのデータを標準出力に出力します。 <<< command >>> getclip <<< option >>> なし |
setclip | 標準入力から読み込んだデータをクリップボードに出力します。 <<< command >>> setclip <<< option >>> なし |
grep | 指定ファイルもしくは標準入力の内容を条件に一致する行のみにフィルタリングします。 <<< command >>> grep keyword [file-name…] <<< option >>> keyword 抽出条件文字列。この条件に一致しない行は無視される。 keywordは正規表現(C++標準 regex_match)文字列として解釈する。 file-name 文字列検索対象のファイル。複数指定可能。 省略した場合は標準入力をインプットとする。 |
cmn-clibへのご要望・カスタマイズについて
C言語ライブラリ「cmn-clib」へのご要望やカスタマイズのご相談は、お問い合わせページよりお願い致します。
コメント