<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>C on Debimate</title><link>https://debimate.jp/categories/c/</link><description>Recent content in C on Debimate</description><image><title>Debimate</title><url>https://debimate.jp/images/default-ogp.jpg</url><link>https://debimate.jp/images/default-ogp.jpg</link></image><generator>Hugo -- 0.161.1</generator><language>ja-JP</language><lastBuildDate>Wed, 17 Nov 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://debimate.jp/categories/c/index.xml" rel="self" type="application/rss+xml"/><item><title>【C言語】完全なオブジェクト指向ではなく、Interfaceのみを利用する選択【Golangを参考に】</title><link>https://debimate.jp/post/ja/2021-11-17-c%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E3%81%AA%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8Finterface%E3%81%AE/</link><pubDate>Wed, 17 Nov 2021 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2021-11-17-c%E8%A8%80%E8%AA%9E%E5%AE%8C%E5%85%A8%E3%81%AA%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8Finterface%E3%81%AE/</guid><description>&lt;h3 id="c言語とオブジェクト指向は相性悪い"&gt;C言語とオブジェクト指向は相性悪い&lt;/h3&gt;
&lt;p&gt;オブジェクト指向は、C言語でも実現できます。&lt;/p&gt;
&lt;p&gt;C言語は、言語によるオブジェクト指向プログラミングのサポートがありません。しかし、開発者が注意深く実装する事によって、オブジェクト指向プログラミングが可能です。&lt;/p&gt;</description></item><item><title>【C言語】_Generic(C11、gcc4.6以降)または__attribute__((overloadable))によるオーバーロード</title><link>https://debimate.jp/post/ja/2021-05-15-c%E8%A8%80%E8%AA%9E_genericc11gcc4-6%E4%BB%A5%E9%99%8D%E3%81%BE%E3%81%9F%E3%81%AF__attribute__overloadable%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%BC%E3%83%90/</link><pubDate>Sat, 15 May 2021 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2021-05-15-c%E8%A8%80%E8%AA%9E_genericc11gcc4-6%E4%BB%A5%E9%99%8D%E3%81%BE%E3%81%9F%E3%81%AF__attribute__overloadable%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AA%E3%83%BC%E3%83%90/</guid><description>&lt;h3 id="前書き"&gt;前書き &lt;/h3&gt;
&lt;p&gt;C言語にはオーバーロードがない。そんな風に考えていた時期が私にもありました。&lt;/p&gt;
&lt;p&gt;オーバーロードとは、メソッド（関数）を多重定義する言語仕様です。例えば、Javaでは引数の順番もしくは引数の個数を変える事によって同名メソッドを複数定義できます。&lt;/p&gt;</description></item><item><title>【コーディングルール】C言語ライブラリのAPIを実装する際に注意すべき事柄</title><link>https://debimate.jp/post/ja/2020-12-19-%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%ABc%E8%A8%80%E8%AA%9E%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AEapi%E3%82%92%E5%AE%9F/</link><pubDate>Sat, 19 Dec 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-12-19-%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%ABc%E8%A8%80%E8%AA%9E%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AEapi%E3%82%92%E5%AE%9F/</guid><description>&lt;h3 id="前書き未だにc言語で消耗中"&gt;前書き：未だにC言語で消耗中&lt;/h3&gt;
&lt;p&gt;2020年現在、C言語ライブラリをフルスクラッチで開発する機会はほぼ無いと思われますが、歴史のある企業に勤めている方は内製ライブラリ（秘伝のタレ）を修正／機能追加する機会があるのではないでしょうか。&lt;/p&gt;</description></item><item><title>【静的解析】ソースコード解析補助ツールSourcetrailの導入方法【例：systemd(C言語)】</title><link>https://debimate.jp/post/ja/2020-12-12-%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E6%9E%90%E8%A3%9C%E5%8A%A9%E3%83%84%E3%83%BC%E3%83%ABsourcetrail%E3%81%AE%E5%B0%8E/</link><pubDate>Sat, 12 Dec 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-12-12-%E9%9D%99%E7%9A%84%E8%A7%A3%E6%9E%90%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E6%9E%90%E8%A3%9C%E5%8A%A9%E3%83%84%E3%83%BC%E3%83%ABsourcetrail%E3%81%AE%E5%B0%8E/</guid><description>&lt;h3 id="前書きsourcetrailとは"&gt;前書き：Sourcetrailとは &lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.sourcetrail.com/"&gt;Sourcetrail&lt;/a&gt;は、C／C++／Java／Pythonで書かれたコードを解析し、クラス（構造体）やメソッドの依存関係／呼び出し関係を可視化してくれるツールです。&lt;/p&gt;
&lt;p&gt;以下の特徴を持つため、会社での業務利用でも気軽にSourcetrailを使用可能です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows／Mac／Linuxで動作&lt;/li&gt;
&lt;li&gt;ライセンスはGPL v3（使用は自由ですが、Sourcetrail自体の改変や販売はソースコード公開義務が発生）&lt;/li&gt;
&lt;li&gt;オフラインで動作（DBを作成しますが、外部サーバにアップロードしません）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用例を下図に示します。&lt;/p&gt;</description></item><item><title>【苦行】C言語で正規表現を用いる方法【標準Cライブラリ(glibc)使用】</title><link>https://debimate.jp/post/ja/2020-11-01-%E8%8B%A6%E8%A1%8Cc%E8%A8%80%E8%AA%9E%E3%81%A7%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%82%92%E7%94%A8%E3%81%84%E3%82%8B%E6%96%B9%E6%B3%95%E6%A8%99%E6%BA%96c%E3%83%A9%E3%82%A4/</link><pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-11-01-%E8%8B%A6%E8%A1%8Cc%E8%A8%80%E8%AA%9E%E3%81%A7%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%82%92%E7%94%A8%E3%81%84%E3%82%8B%E6%96%B9%E6%B3%95%E6%A8%99%E6%BA%96c%E3%83%A9%E3%82%A4/</guid><description>&lt;h3 id="前書きc言語で正規表現を使う理由などない"&gt; 前書き：C言語で正規表現を使う理由などない&lt;/h3&gt;
&lt;p&gt;正規表現（Regular Expression）は強力な機能なため、様々なLinuxコマンドやプログラミング言語、アプリに導入されています。特に、sed／awk／egrepコマンドやPerl／Rubyは、正規表現による文字列操作の代名詞のような存在です。&lt;/p&gt;</description></item><item><title>Debian(64bit)で32bitバイナリを実行もしくは作成する方法（C言語）</title><link>https://debimate.jp/post/ja/2020-08-19-debian64bit%E3%81%A732bit%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E5%AE%9F%E8%A1%8C%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95c%E8%A8%80/</link><pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-08-19-debian64bit%E3%81%A732bit%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%92%E5%AE%9F%E8%A1%8C%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95c%E8%A8%80/</guid><description>&lt;h3 id="検証環境"&gt;検証環境&lt;/h3&gt;
&lt;p&gt;Debian10(64Bit)、Ryzen 7 3800X環境で検証します。CPUアーキテクチャはIntel／AMDを想定しており、ARMに関しては本記事で説明しません。&lt;/p&gt;</description></item><item><title>起動済みプロセス（例：デーモンプロセス）の標準出力を確認する方法</title><link>https://debimate.jp/post/ja/2020-07-04-%E8%B5%B7%E5%8B%95%E6%B8%88%E3%81%BF%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E4%BE%8B%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%A8%99/</link><pubDate>Sat, 04 Jul 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-07-04-%E8%B5%B7%E5%8B%95%E6%B8%88%E3%81%BF%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E4%BE%8B%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%A8%99/</guid><description>&lt;h3 id="前書きログを残さないデーモンと出会った"&gt;前書き：ログを残さないデーモンと出会った&lt;/h3&gt;
&lt;p&gt;DBにアクセスするデーモンプロセスが、稀にSegmentation  Faultでお亡くなりになる現象に遭遇しました。&lt;/p&gt;
&lt;p&gt;このデーモンプロセスは、C言語で書かれており、デバッグ情報をログファイルに殆ど出力していませんでした。多くの情報は標準出力に出力されていたため、デバッグするにはデーモンプロセスの標準出力を確認する必要がありました（もしくは、GDBを使う）。&lt;/p&gt;</description></item><item><title>【C言語】static(private)関数をユニットテストする3つの方法【単体テストのバッドノウハウ】</title><link>https://debimate.jp/post/ja/2020-04-26-c%E8%A8%80%E8%AA%9Estaticprivate%E9%96%A2%E6%95%B0%E3%82%92%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B3%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 26 Apr 2020 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2020-04-26-c%E8%A8%80%E8%AA%9Estaticprivate%E9%96%A2%E6%95%B0%E3%82%92%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B3%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95/</guid><description>&lt;h3 id="前書きc言語のstatic関数は単体テストできます"&gt;前書き：C言語のstatic関数は単体テストできます&lt;/h3&gt;
&lt;p&gt;C言語で単体テストを作成する際に、**「どうやってstatic関数をテストコードから呼び出せばいいのか？」**と迷った事はありませんか？例えば、以下のコードのprivate_func()を他のCソースファイル（例：テストコード）から呼び出せるでしょうか。&lt;/p&gt;</description></item><item><title>C言語で非推奨なC標準関数(例:strcpy)をコンパイルエラーにする方法</title><link>https://debimate.jp/post/ja/2019-09-07-c%E8%A8%80%E8%AA%9E%E3%81%A7%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%AAc%E6%A8%99%E6%BA%96%E9%96%A2%E6%95%B0%E4%BE%8Bstrcpy%E3%82%92%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-09-07-c%E8%A8%80%E8%AA%9E%E3%81%A7%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%AAc%E6%A8%99%E6%BA%96%E9%96%A2%E6%95%B0%E4%BE%8Bstrcpy%E3%82%92%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;C言語は歴史の長い言語のため、非推奨関数があります。例えば、strcpy()は文字列をコピーする際にサイズチェックをしないため、バッファオーバーフローを引き起こす可能性があります。そのため、一般的には、strcpy()の代替関数としてstrcpy_s()を使用する事が推奨されています。&lt;/p&gt;</description></item><item><title>Linux Kernel: mutex APIによるロック(排他)方法</title><link>https://debimate.jp/post/ja/2019-07-07-linux-kernel-mutex-api%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AD%E3%83%83%E3%82%AF%E6%8E%92%E4%BB%96%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 07 Jul 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-07-07-linux-kernel-mutex-api%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AD%E3%83%83%E3%82%AF%E6%8E%92%E4%BB%96%E6%96%B9%E6%B3%95/</guid><description>&lt;h3 id="前書きmutexとは"&gt;前書き：mutexとは&lt;/h3&gt;
&lt;p&gt;Linux Kernelに限らず、様々なプログラミング言語やライブラリはロック機構を提供しています。ロック機構は、複数のプロセスが同時に共有データを書き換え、意図しないデータ状態となる事を防ぎます。代表的なロック機構には、&lt;/p&gt;</description></item><item><title>Linux Kernelの簡単なCharacter Deviceを作成する方法(Linked List APIの使用方法サンプル)</title><link>https://debimate.jp/post/ja/2019-06-23-linux-kernel%E3%81%AE%E7%B0%A1%E5%8D%98%E3%81%AAcharacter-device%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95linked-list-api%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E3%82%B5/</link><pubDate>Sun, 23 Jun 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-06-23-linux-kernel%E3%81%AE%E7%B0%A1%E5%8D%98%E3%81%AAcharacter-device%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95linked-list-api%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E3%82%B5/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事では、Linux KernelにおけるCharacter Device向けのDevice Driverを作成する方法を示します。専用のHardware(例：シリアルデバイスのUARTなど)を用いず、メモリ上のデータ読み書きのみを行います。そのため、擬似デバイス(/dev/nullや/dev/zeroなど)を操作するDriverと同等です。&lt;/p&gt;</description></item><item><title>Linux Kernel: __initマクロ、__exitマクロの役割(メモリの有効利用)</title><link>https://debimate.jp/post/ja/2019-04-29-linux-kernel-__init%E3%83%9E%E3%82%AF%E3%83%AD__exit%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%BD%B9%E5%89%B2%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E6%9C%89%E5%8A%B9%E5%88%A9%E7%94%A8/</link><pubDate>Mon, 29 Apr 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-04-29-linux-kernel-__init%E3%83%9E%E3%82%AF%E3%83%AD__exit%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%BD%B9%E5%89%B2%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E6%9C%89%E5%8A%B9%E5%88%A9%E7%94%A8/</guid><description>&lt;h3 id="__initマクロ__exitマクロが使われるケース"&gt;__initマクロ、__exitマクロが使われるケース&lt;/h3&gt;
&lt;p&gt;一般的に、__initマクロはKernelモジュールの初期化時、__exitマクロはKernelモジュールの終了時に付与します。以下の例では、初期化関数がdebimate_init()、終了関数がdebimate_exit()で、それぞれにマクロを付与しています。&lt;/p&gt;</description></item><item><title>Linux Kernel: List構造を操作するためのAPI(Listの使い方)</title><link>https://debimate.jp/post/ja/2019-04-07-linux-kernel-list%E6%A7%8B%E9%80%A0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEapilist%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-04-07-linux-kernel-list%E6%A7%8B%E9%80%A0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEapilist%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;C言語は、言語としてList構造およびList操作APIをサポートしていません。ここでのList構造とは、「次のデータ(前のデータ)へのポインタ」を意味します。本記事では、データとList構造(nextポインタ、prevポインタ)をセットにした状態をノードと呼びます。&lt;/p&gt;</description></item><item><title>Linux Kernel: 構造体メンバポインタから構造体の先頭ポインタを得るcontainer_ofマクロ</title><link>https://debimate.jp/post/ja/2019-04-06-linux-kernel-%E6%A7%8B%E9%80%A0%E4%BD%93%E3%83%A1%E3%83%B3%E3%83%90%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%8B%E3%82%89%E6%A7%8B%E9%80%A0%E4%BD%93%E3%81%AE%E5%85%88%E9%A0%AD%E3%83%9D%E3%82%A4/</link><pubDate>Sat, 06 Apr 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-04-06-linux-kernel-%E6%A7%8B%E9%80%A0%E4%BD%93%E3%83%A1%E3%83%B3%E3%83%90%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%8B%E3%82%89%E6%A7%8B%E9%80%A0%E4%BD%93%E3%81%AE%E5%85%88%E9%A0%AD%E3%83%9D%E3%82%A4/</guid><description>&lt;h3 id="container_ofマクロとは"&gt;container_ofマクロとは&lt;/h3&gt;
&lt;p&gt;container_ofマクロは、Linux Kernelで用いられ、「構造体メンバポインタ」から「そのメンバを含む構造体の先頭ポインタ」を得られるマクロです。C言語では、&lt;a href="http://www.c-tipsref.com/reference/stddef/offsetof.html"&gt;offsetofマクロ&lt;/a&gt;によって構造体メンバアドレスのオフセット(構造体先頭アドレスからメンバ変数までのオフセット)を算出できます。container_ofマクロは、このオフセットを利用し、構造体の先頭アドレスを算出しています。&lt;/p&gt;</description></item><item><title>Linux Kernel: NULLポインタエラーハンドリング(ERR_PTR, IS_ERR, PTR_ERR)</title><link>https://debimate.jp/post/ja/2019-03-02-linux-kernel-null%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0err_ptr-is_err-ptr_err/</link><pubDate>Sat, 02 Mar 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-03-02-linux-kernel-null%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0err_ptr-is_err-ptr_err/</guid><description>&lt;h3 id="返り値がnull--情報量がない"&gt;&amp;ldquo;返り値がNULL&amp;rdquo; = &amp;ldquo;情報量がない&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;C言語には、返り値としてポインタを返す関数があります。&lt;/p&gt;
&lt;p&gt;User空間の関数で例を挙げれば、メモリを確保するmalloc()、ファイルを開くfopen()などです。これらの関数は、エラー時にNULLを返します。&lt;/p&gt;</description></item><item><title>Linux Kernel: エラー番号の一覧</title><link>https://debimate.jp/post/ja/2019-02-24-linux-kernel-%E3%82%A8%E3%83%A9%E3%83%BC%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7/</link><pubDate>Sun, 24 Feb 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-02-24-linux-kernel-%E3%82%A8%E3%83%A9%E3%83%BC%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事では、Linux Kernelが用いるエラー番号を説明します。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="linux-kernelがエラー番号errnoを正しく返す意義"&gt;Linux Kernelがエラー番号（errno）を正しく返す意義&lt;/h3&gt;
&lt;p&gt;Linux Kernelでは、エラーの種類に応じて、返すべきエラー番号が定められています。例えば、ファイルが存在しない場合は、&amp;ldquo;ENOENT(No such file or directory、 エラー番号2)&amp;ldquo;を返します。Linux Kernel内のエラー内容は、変数errnoを通してUser空間にも伝わります。&lt;/p&gt;</description></item><item><title>Linux Kernel: prink(print kernel)によるメッセージ出力</title><link>https://debimate.jp/post/ja/2019-02-02-linux-kernel-prinkprint-kernel%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E5%87%BA%E5%8A%9B/</link><pubDate>Sat, 02 Feb 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-02-02-linux-kernel-prinkprint-kernel%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E5%87%BA%E5%8A%9B/</guid><description>&lt;h3 id="printkとは"&gt;printk()とは&lt;/h3&gt;
&lt;p&gt;printk(print kernel)は、ユーザ空間のprintf( print formatted )に相当します。注意すべき点として、printf()と以下の点が異なります。本記事では、この差異を説明します。&lt;/p&gt;</description></item><item><title>環境構築: Linux Kernelモジュールの作成準備</title><link>https://debimate.jp/post/ja/2019-01-27-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89-linux-kernel%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90%E6%BA%96%E5%82%99/</link><pubDate>Sun, 27 Jan 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-01-27-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89-linux-kernel%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90%E6%BA%96%E5%82%99/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事は、「Linux Kernel Device Driverの雛形作成」や「Linux Kernel内APIを試すためのモジュール作成」を目的として、最低限必要な環境構築手順を記載しています。&lt;/p&gt;</description></item><item><title>コードリーディング(C言語)：chroot / ischroot</title><link>https://debimate.jp/post/ja/2019-01-20-%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0c%E8%A8%80%E8%AA%9Echroot-ischroot/</link><pubDate>Sun, 20 Jan 2019 00:00:00 +0000</pubDate><guid>https://debimate.jp/post/ja/2019-01-20-%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0c%E8%A8%80%E8%AA%9Echroot-ischroot/</guid><description>&lt;h3 id="前書き"&gt;前書き&lt;/h3&gt;
&lt;p&gt;本記事は、以下のコマンドのコードリーディング結果を記載しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロセスおよび子プロセスの(見かけ上の)ルートディレクトリを変更する&lt;a href="https://ja.wikipedia.org/wiki/Chroot"&gt;chroot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;プロセスがchroot環境(jail環境)で動作しているかを検出する&lt;a href="https://www.cs.drexel.edu/cgi-bin/manServer.pl/usr/share/man/man1/ischroot.1"&gt;ischroot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="ischroot chroot" loading="lazy" src="https://debimate.jp/post/ja/2019-01-20-%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0c%E8%A8%80%E8%AA%9Echroot-ischroot/images/ischroot_chroot.png"&gt;&lt;/p&gt;</description></item></channel></rss>