#author("2022-01-26T05:44:33+00:00","default:admin","admin") #author("2022-01-27T04:43:21+00:00","default:admin","admin") -[[C言語解説:https://www.mm2d.net/main/prog/c/]] *Linuxカーネル空間内 [#of26eb93] -[[Linux と C言語 でシステムプログラミングを始めよう:http://linuxc.info/]] **文字列処理 [#q41b60be] **ファイル処理 [#l4a989ec] -[[Linux カーネル空間からのファイルIOの話 + 他:https://userlocalhosts.blog.ss-blog.jp/2009-02-03]] -[[Linuxのファイルディスクリプタをハックする:https://qiita.com/tajima_taso/items/7e696944cb521958e63d]] -[[デバイスドライバにreadを実装する:http://public2016.hatenablog.com/entry/2016/09/10/222637]] -[[stat, fstat, lstat, fstatat - ファイルの状態を取得する:http://manpages.ubuntu.com/manpages/bionic/ja/man2/stat.2.html]] -[[組み込みLinuxデバイスドライバの作り方 (4) 4回目: read/writeの実装とメモリのお話:https://qiita.com/iwatake2222/items/26d5f7f4894ccc4ce227]] -[[Linux Kernel ~ 仮想ファイルシステムの操作 ~:https://k-onishi.hatenablog.jp/entry/2019/09/12/004611]] ***ファイル存在チェック [#l8c6a057] -[[ファイルの存在を確認する | Programming Place Plus C言語編 逆引き:https://programming-place.net/ppp/contents/c/rev_res/file000.html]] -[[C 言語でファイルが存在するかどうかのチェック:https://www.delftstack.com/ja/howto/c/c-check-if-file-exists/]] -[[ファイル名変更、移動、削除、存在確認:https://programming.pc-note.net/c/file8.html]] -[[オープン処理のいろいろな書き方:https://dev.grapecity.co.jp/support/powernews/column/clang/037/page01.htm]] ***file_operations [#ee5c4de2] -ユーザ空間からファイルの読み書きを行う時は、open システムコールを呼び出し、read/write システムコールを呼び出せばいい -しかし、カーネルはプロセスではない為 task_struct のように自身を管理するようなオブジェクトは持っていない。よってファイルディスクリプタ云々という操作は使えない。 -オープンしたファイルを管理するコアとなるデータ構造は include/linxu/fs.h で定義されているファイルオブジェクト (struct file) になる。 -ファイル操作を行う場合には、ファイルオブジェクトの f_op メンバが持つ file_operations オブジェクトで定義されるメソッドを呼び出す。 -カーネルモードでファイルに対する書き込みを行う為にはファイルオブジェクトを生成し、ファイルオブジェクトの file_operations メソッドを呼び出す事で実現できる -ファイルオブジェクトの取得には、filp_open() 関数を利用する ***path_lookup [#o4a85895] -[[`path_lookup()`を追ってみる:https://cstmize.hatenablog.jp/entry/2019/05/06/%60path_lookup%28%29%60%E3%82%92%E8%BF%BD%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B]] *ハッシュ [#pdd636a1] -[[いろいろな言語の連想配列系リテラル記法を比較してみた:https://techracho.bpsinc.jp/hachi8833/2020_07_31/95098]] -[[C/C++ で使える Hashtable:https://fd0.hatenablog.jp/entry/20080419/p1]] *ポインタ [#f6491069] -[[ポインタ:http://programming.pc-note.net/c/pointer.html]] -[[ポインタと関数:http://programming.pc-note.net/c/pointer2.html]] -[[ポインタと配列:http://programming.pc-note.net/c/pointer3.html]] -[[ポインタと文字列:http://programming.pc-note.net/c/pointer4.html]] -[[ポインタを返す関数:http://programming.pc-note.net/c/pointer5.html]] *文字列処理 [#q82e54be] -[[[C言語] printf系の関数に指定するフォーマット引数:https://qiita.com/suzutsuki0220/items/c3cacbab4f51ce1b0eb3]] -[[【C言語】文字列を連結する【危険なstrcatと安全なsnprintf関数による文字列結合】:http://marycore.jp/prog/c-lang/concat-c-string/#stncat%E9%96%A2%E6%95%B0%E3%81%A8strncat%E9%96%A2%E6%95%B0%E3%81%AE%E5%8D%B1%E9%99%BA%E6%80%A7%E3%83%BB%E5%AE%89%E5%85%A8%E7%AD%96]] -[[文字型と文字列:http://programming.pc-note.net/c/mojiretsu.html]] -[[memcpy(), memcmp(), memset():http://blog.kazuya.co/c/2014/05/20/mem-family.html]] -[[memset()とmemcpy():http://techtipshoge.blogspot.jp/2010/07/memsetmemcpy.html]] **文字列比較 [#h6067b5b] -[[Note627 文字列の比較:http://chausson.eng.kagawa-u.ac.jp/Comp/Prog/DosC/Sec6/Note627.html]] **文字列分割 [#aa7db387] ***strtok [#s4789a76] -[[Can I use strtok() in a Linux Kernel Module?:https://stackoverflow.com/questions/2246618/can-i-use-strtok-in-a-linux-kernel-module]] -strtok() は使用禁止になった -代わりに strsep() を使うようにとのこと --[[Slicing Strings with strsep():https://c-for-dummies.com/blog/?p=1769]] **型変換 [#za1bbe2b] ***atoi [#u61f30f9] -[[How convert a char[] string to int in the Linux kernel?:https://stackoverflow.com/questions/6139493/how-convert-a-char-string-to-int-in-the-linux-kernel]] -Linuxカーネルでは atoi() はない -代わりに simple_strtol() を使うようにとのこと -[[C++ (Cpp) simple_strtolの例:https://cpp.hotexamples.com/jp/examples/-/-/simple_strtol/cpp-simple_strtol-function-examples.html]] *日付・時刻 [#z080e0a3] -[[C言語の時刻・時間を図示してみた:https://qiita.com/Riliumph/items/841ebaf0d349ff6e1d79]] *画像処理 [#rc26745b] -[[ビットマップで画像処理:http://techtipshoge.blogspot.jp/2011/07/blog-post_23.html]] -[[Bitmapファイルを入出力してみる:http://hooktail.org/computer/index.php?Bitmap%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%C6%FE%BD%D0%CE%CF%A4%B7%A4%C6%A4%DF%A4%EB]] -[[C言語でBMPファイルのR/W:http://happyfield.hatenablog.com/entry/2015/11/27/003748]] -[[画像ファイルの扱い方 (6) -BMP(DIB)形式 (2):https://www.mm2d.net/main/legacy/c/c-12.html]] -[[画像ファイル入出力:https://www.mm2d.net/main/prog/c/image_io-12.html]] *変数 [#y84ed32a] **スコープ [#sc8ee313] -[[C言語 staticを変数と関数に付ける価値【保護の仕組みを解説】:https://monozukuri-c.com/langc-funclist-static/]] -[[static変数のスコープは、宣言したファイル内となる:https://it-ojisan.tokyo/c-static-var/]] *関数 [#u1c6bca4] -[[関数内で宣言した配列変数をreturnしてはいけない:http://fa11enprince.hatenablog.com/entry/2014/06/10/023712]] -[[ポインタを返す関数:http://www.ie.u-ryukyu.ac.jp/~e075769/study/study/c/ch10/10_1.php]] *エラー処理 [#e97132a0] -[[errnoでエラーを確認する:https://qiita.com/ota42y/items/b2f59d7a82c550648677]] *型 [#ted6f32f] **size_t [#k7b4101a] -[[size_tは環境によって定義が変わるという話:https://ota42y.com/blog/2014/11/08/size-t/]] -[[size_t型:http://manabu.quu.cc/up/3/e31555.htm]] *トラブルシューティング [#nf3c8b59] **メモリリーク [#e0b89d13] -[[[6-5.]メモリリーク - IPA セキュア・プログラミング講座:https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_05.html]] -[[メモリ操作(C言語):https://programming.pc-note.net/c/memory.html]]