<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd</id>
	<title>C++の応用 - Systemd - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;action=history"/>
	<updated>2026-07-02T10:24:28Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=14975&amp;oldid=prev</id>
		<title>2026年6月13日 (土) 03:31にWikiによる</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=14975&amp;oldid=prev"/>
		<updated>2026-06-13T03:31:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;amp;diff=14975&amp;amp;oldid=11704&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=11704&amp;oldid=prev</id>
		<title>Wiki: /* サンプルコード */</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=11704&amp;oldid=prev"/>
		<updated>2024-10-23T15:13:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;サンプルコード&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年10月24日 (木) 00:13時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l67&quot;&gt;67行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;67行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;サンプルコード &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Systemdの使用例 : SSHサービスの起動 &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;QProcess&amp;lt;/code&amp;gt;クラスを使用せずに、Systemdを利用してSSHデーモンを起動する場合は、Systemdのライブラリを使用する必要がある。&lt;/del&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Systemdを利用してサービスを起動する場合は、Systemdのライブラリを使用する必要がある。&lt;/ins&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;以下の例では、Systemdのライブラリを使用してSSHデーモンを起動している。&lt;/del&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;以下の例では、Systemdのライブラリを使用してSSHサービスを起動している。&lt;/ins&gt;&amp;lt;br&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;lt;code&amp;gt;sd_bus_open_system&amp;lt;/code&amp;gt;関数を使用して、システムバスへの接続を開く。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;lt;code&amp;gt;sd_bus_open_system&amp;lt;/code&amp;gt;関数を使用して、システムバスへの接続を開く。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#: 戻り値が負の値の場合は、接続に失敗したことを示す。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#: 戻り値が負の値の場合は、接続に失敗したことを示す。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mochiu_wiki:diff:1.41:old-11703:rev-11704:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
	<entry>
		<id>https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=11703&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。&lt;br&gt; &lt;br&gt; 一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。&lt;br&gt; 最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。&lt;br…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=C%2B%2B%E3%81%AE%E5%BF%9C%E7%94%A8_-_Systemd&amp;diff=11703&amp;oldid=prev"/>
		<updated>2024-10-23T15:12:13Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; 一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。&amp;lt;br&amp;gt; 最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。&amp;lt;br…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。&amp;lt;br&amp;gt;&lt;br /&gt;
最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、ハードウェアの検出やUSBメモリの自動統合(マウント)等もサービスによって行われる。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
サービスには、システム起動時に関連するタスクやハードウェアに関連するタスクを行う&amp;quot;内部サービス&amp;quot;と、&amp;lt;br&amp;gt;&lt;br /&gt;
その後にユーザがインストールするサービス(通常は全てのサーバサービスを含む)の2種類がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
技術用語やコンピュータ用語では、サービスは伝統的にデーモンと呼ばれている。&amp;lt;br&amp;gt;&lt;br /&gt;
そのため、サーバコンポーネントであるsshdやmysqldのように、サービスを表すプログラムの最後の文字として&amp;quot;d&amp;quot;が用いられることが多い。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
一方、Systemdは、システムおよびセッションマネージャ(initシステム)であり、&amp;lt;br&amp;gt;&lt;br /&gt;
コンピュータの起動プロセスからシャットダウンまでの全動作時間にわたって、システム上で動作するすべてのサービスを管理する役割を担っている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
プロセスは常に(可能な限り)並行して起動され、起動プロセスを可能な限り短くする。&amp;lt;br&amp;gt;&lt;br /&gt;
ここで、.serviceで終わる設定ファイルを作成して、Systemdが制御・監視するプロセスに関するコードを保持する場合をSystemd Service Unitファイルと呼ぶ。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Systemdには、サービス、タイマ、マウントポイント、ソケット、スワップスペース、デバイス等のユニットが存在する。&amp;lt;br&amp;gt;&lt;br /&gt;
そのため、Systemdは管理用の設定の全てをファイルから取得する。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Systemdの用語では、これらを&amp;quot;ユニット&amp;quot;と呼び、システム全体に適用されるユニットと各ユーザ領域にのみ適用されるユニットがある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
ユニットには、サービスを開始するためのサービスユニットや、ある時点でのアクションを(繰り返し)実行するためのタイマユニット等、様々な種類がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
各タイプのユニットファイルに共通しているのは、iniファイルに似た構造をしていることである。&amp;lt;br&amp;gt;&lt;br /&gt;
ユニットファイルは、いくつかのセクション(多くの場合、3セクション)で構成されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Systemdではセクションと呼ばれ、その中に一連のキーと値のペア(Systemdではディレクティブと呼ばれる)が格納されている。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Systemdライブラリのインストール ==&lt;br /&gt;
==== ライセンス ====&lt;br /&gt;
Systemdライブラリのライセンスは、LGPL 2.1以降、または、 GPL 2.0で利用可能である。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== パッケージ管理システムからインストール ====&lt;br /&gt;
 # RHEL&lt;br /&gt;
 sudo dnf install systemd-devel&lt;br /&gt;
 &lt;br /&gt;
 # SUSE&lt;br /&gt;
 sudo zypper install systemd-devel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== ソースコードからインストール ====&lt;br /&gt;
Systemdのビルドに必要なライブラリをインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo zypper install meson ninja python3-Jinja2 glib2-devel dbus-1-devel p11-kit-devel libarchive-devel pcre2-devel libcurl-devel libcap-devel \&lt;br /&gt;
                     libmount-devel libfdisk-devel libblkid-devel libdw-devel libpwquality-devel passwdqc-devel libkmod-devel libbpf-devel \&lt;br /&gt;
                     zlib-devel liblz4-devel libzstd-devel xz-devel libbz2-devel \&lt;br /&gt;
                     pam-devel libgnutls-devel libopenssl-devel libopenssl-1_1-devel libcryptsetup-devel libgcrypt-devel libgpg-error-devel \&lt;br /&gt;
                     qrencode-devel libiptc-devel libidn2-devel libmicrohttpd-devel \&lt;br /&gt;
                     libxkbcommon-devel libfido2-devel tpm2-0-tss-devel libseccomp-devel libacl-devel audit-devel \&lt;br /&gt;
                     libapparmor-devel  # AppArmorを使用する場合&lt;br /&gt;
                     libselinux-devel   # SELinuxを使用する場合&lt;br /&gt;
                     xen-devel          # Xenを使用する場合&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/systemd/systemd SystemdのGithub]にアクセスして、ソースコードをダウンロードする。&amp;lt;br&amp;gt;&lt;br /&gt;
ダウンロードしたファイルを解凍する。&amp;lt;br&amp;gt;&lt;br /&gt;
 tar xf systemd-&amp;lt;バージョン&amp;gt;.tar.gz&lt;br /&gt;
 cd systemd-&amp;lt;バージョン&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Systemdをビルドおよびインストールする。&amp;lt;br&amp;gt;&lt;br /&gt;
 meson --prefix=&amp;lt;Systemdのインストールディレクトリ&amp;gt; -Dmode=release build&lt;br /&gt;
 ninja -C ./build -j $(nproc)&lt;br /&gt;
 ninja -C ./build install&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== サンプルコード ==&lt;br /&gt;
&amp;lt;code&amp;gt;QProcess&amp;lt;/code&amp;gt;クラスを使用せずに、Systemdを利用してSSHデーモンを起動する場合は、Systemdのライブラリを使用する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
以下の例では、Systemdのライブラリを使用してSSHデーモンを起動している。&amp;lt;br&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;sd_bus_open_system&amp;lt;/code&amp;gt;関数を使用して、システムバスへの接続を開く。&lt;br /&gt;
#: 戻り値が負の値の場合は、接続に失敗したことを示す。&lt;br /&gt;
# &amp;lt;code&amp;gt;sd_bus_call_method&amp;lt;/code&amp;gt;関数を使用して、SystemdのD-Busインターフェイスを介してsshd.serviceを起動する。&lt;br /&gt;
#: 関数の引数には、バスの接続、D-Busサービス名、D-Busオブジェクトのパス名、インターフェイス名、メソッド名、入力引数、出力引数、起動するサービス名とモードを指定する。&lt;br /&gt;
#: 戻り値が負の値の場合は、サービスの起動に失敗したことを示す。&lt;br /&gt;
#: サービスの起動に成功した場合は、成功メッセージをデバッグ出力に表示している。&lt;br /&gt;
# &amp;lt;code&amp;gt;sd_bus_unref&amp;lt;/code&amp;gt;関数を使用して、バスの接続を閉じる。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
また、RAIIパターンを使用することにより、例外が発生した場合でもリソースが確実に解放されることを保証している。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
このサンプルコードを実行するには、Systemdライブラリがインストールされている必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
また、適切な権限でプログラムを実行する必要がある。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;※注意&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;この方法は、Systemdが利用可能なシステムでのみ動作する。&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* CMakeを使用する場合&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
 # Package Configの使用&lt;br /&gt;
 find_package(PkgConfig REQUIRED)&lt;br /&gt;
 &lt;br /&gt;
 # Systemdライブラリの使用&lt;br /&gt;
 pkg_check_modules(SYSTEMD REQUIRED libsystemd)&lt;br /&gt;
 &lt;br /&gt;
 ## Systemdライブラリのバージョンを指定する場合&lt;br /&gt;
 #pkg_check_modules(SYSTEMD REQUIRED libsystemd &amp;gt;= &amp;lt;バージョン&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 target_include_directories(&amp;lt;your_target&amp;gt; PUBLIC&lt;br /&gt;
    # ...略&lt;br /&gt;
    ${SYSTEMD_INCLUDE_DIRS}&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 target_link_libraries(&amp;lt;your_target&amp;gt;&lt;br /&gt;
    # ...略&lt;br /&gt;
    ${SYSTEMD_LIBRARIES}&lt;br /&gt;
 )&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 #include &amp;lt;cstring&amp;gt;&lt;br /&gt;
 #include &amp;lt;system_error&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdexcept&amp;gt;&lt;br /&gt;
 #include &amp;lt;systemd/sd-bus.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // システムエラーを処理するためのカスタム例外クラス&lt;br /&gt;
 class SystemdError : public std::runtime_error&lt;br /&gt;
 {&lt;br /&gt;
 private:&lt;br /&gt;
    int error_code_;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
    explicit SystemdError(const std::string &amp;amp;message, int error_code) : std::runtime_error(message + &amp;quot;: &amp;quot; + std::string(strerror(-error_code)))&lt;br /&gt;
       , error_code_(-error_code)&lt;br /&gt;
    {}&lt;br /&gt;
 &lt;br /&gt;
    int error_code() const { return error_code_; }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class ScopedBusConnection&lt;br /&gt;
 {&lt;br /&gt;
 private:&lt;br /&gt;
    sd_bus* bus_;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
    // D-Bus接続を確立して、RAIIでリソース管理を行う&lt;br /&gt;
    explicit ScopedBusConnection() : bus_(nullptr)&lt;br /&gt;
    {&lt;br /&gt;
       int ret = sd_bus_open_system(&amp;amp;bus_);&lt;br /&gt;
       if (ret &amp;lt; 0) {&lt;br /&gt;
          throw SystemdError(&amp;quot;D-Bus接続の確立に失敗&amp;quot;, ret);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // デストラクタでD-Bus接続を自動的に解放&lt;br /&gt;
    ~ScopedBusConnection()&lt;br /&gt;
    {&lt;br /&gt;
       if (bus_) {&lt;br /&gt;
          sd_bus_unref(bus_);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // D-Busハンドルを取得&lt;br /&gt;
    sd_bus* get() { return bus_; }&lt;br /&gt;
 &lt;br /&gt;
    // コピーを禁止&lt;br /&gt;
    ScopedBusConnection(const ScopedBusConnection&amp;amp;)            = delete;&lt;br /&gt;
    ScopedBusConnection&amp;amp; operator=(const ScopedBusConnection&amp;amp;) = delete;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 // SSHサービスを起動する関数&lt;br /&gt;
 void start_ssh_service(sd_bus* bus)&lt;br /&gt;
 {&lt;br /&gt;
    if (!bus) {&lt;br /&gt;
       throw std::invalid_argument(&amp;quot;無効なD-Busハンドルが渡されました&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    int ret = sd_bus_call_method(bus,&lt;br /&gt;
                                 &amp;quot;org.freedesktop.systemd1&amp;quot;,           // サービス名&lt;br /&gt;
                                 &amp;quot;/org/freedesktop/systemd1&amp;quot;,          // オブジェクトパス&lt;br /&gt;
                                 &amp;quot;org.freedesktop.systemd1.Manager&amp;quot;,   // インターフェース名&lt;br /&gt;
                                 &amp;quot;StartUnit&amp;quot;,                          // メソッド名&lt;br /&gt;
                                 nullptr,                              // エラー戻り値&lt;br /&gt;
                                 nullptr,                              // 戻り値&lt;br /&gt;
                                 &amp;quot;ss&amp;quot;,                                 // 引数の型（string, string）&lt;br /&gt;
                                 &amp;quot;sshd.service&amp;quot;,                       // 起動するサービス名&lt;br /&gt;
                                 &amp;quot;replace&amp;quot;);                           // 起動モード&lt;br /&gt;
 &lt;br /&gt;
    if (ret &amp;lt; 0) {&lt;br /&gt;
       throw SystemdError(&amp;quot;SSHサービスの起動に失敗しました&amp;quot;, ret);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
    try {&lt;br /&gt;
       // RAIIを使用してD-Bus接続を管理&lt;br /&gt;
       ScopedBusConnection bus_connection;&lt;br /&gt;
 &lt;br /&gt;
       // SSHサービスを起動&lt;br /&gt;
       start_ssh_service(bus_connection.get());&lt;br /&gt;
 &lt;br /&gt;
       std::cout &amp;lt;&amp;lt; &amp;quot;SSHサービスの起動に成功しました&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
 &lt;br /&gt;
       return 0;&lt;br /&gt;
    }&lt;br /&gt;
    catch (const SystemdError &amp;amp;e) {&lt;br /&gt;
       // システム関連のエラーを処理&lt;br /&gt;
       std::cerr &amp;lt;&amp;lt; &amp;quot;システムエラーが発生: &amp;quot; &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       std::cerr &amp;lt;&amp;lt; &amp;quot;エラーコード: &amp;quot; &amp;lt;&amp;lt; e.error_code() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       return -1;&lt;br /&gt;
    }&lt;br /&gt;
    catch (const std::exception &amp;amp;e) {&lt;br /&gt;
       // その他の一般的なエラーを処理&lt;br /&gt;
       std::cerr &amp;lt;&amp;lt; &amp;quot;予期せぬエラーが発生: &amp;quot; &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       return -2;&lt;br /&gt;
    }&lt;br /&gt;
    catch (...) {&lt;br /&gt;
       // 未知のエラーを処理&lt;br /&gt;
       std::cerr &amp;lt;&amp;lt; &amp;quot;不明なエラーが発生&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
       return -3;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:C++]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>