cmn-clib(C言語ライブラリ)

ソフトウェア

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
versiontargetDownload URL
0.1Windows x64https://ityorozu.net/dev/cmn-clib_v0.1/bin/cmn-clib_v0.1_bin_win-x64.zip
0.1Linux x64https://ityorozu.net/dev/cmn-clib_v0.1/bin/cmn-clib_v0.1_bin_linux-x64.tar.gz
0.2Windows x64https://ityorozu.net/dev/cmn-clib_v0.2/bin/cmn-clib_v0.2_bin_win-x64.zip
0.2Linux x64https://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 の場合

プロジェクトのプロパティを開き、以下を設定します。

  1. [C/C++] -> [全般] -> [追加のインクルードディレクトリ]に、解凍したcmn-clibの「inc」ディレクトリのパスを追加。
  2. [リンカー] -> [入力] -> [追加の依存ファイル]に、解凍したcmn-clibの「cmn-clib.lib」のパスを追加。
  3. プログラムソースコードに #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で管理しています。

GitHub - kumagaihs/cmn-clib: C/C++用の関数ライブラリ&ツールです。Windows/Linuxのマルチプラットフォームで開発・利用が可能です。
C/C++用の関数ライブラリ&ツールです。Windows/Linuxのマルチプラットフォームで開発・利用が可能です。 - kumagaihs/cmn-clib
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ドキュメント

関数一覧

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」へのご要望やカスタマイズのご相談は、お問い合わせページよりお願い致します。

コメント

タイトルとURLをコピーしました