C
/usr/include 中的 .x 文件是什麼?
My
/usr/include
包含多個具有.x
文件副檔名的文件,例如/usr/include/rpcsvc/rquota.x
.它們看起來像 C 原始碼(
file /usr/include/rpcsvc/rquota.x
在 中執行結果C source, ASCII text
),但它們不是有效的 C 原始碼(例如program
和version
seek 關鍵字)。它們到底是什麼?鑑於副檔名很短,很難用Google搜尋,有些網站只是錯誤/不完整(例如,維基百科說“舊的 DirectX 文件”)。
它們是基於SunRPC的協議(RPC 代表遠端過程呼叫)的描述。每個文件通常描述這些 RPC 使用的資料結構,以及實現它們的程序;比如
yppasswd.x
介紹黃頁密碼更新協議,比較容易理解:program YPPASSWDPROG { version YPPASSWDVERS { /* * Update my passwd entry */ int YPPASSWDPROC_UPDATE(yppasswd) = 1; } = 1; } = 100009; struct passwd { string pw_name<>; /* username */ string pw_passwd<>; /* encrypted password */ int pw_uid; /* user id */ int pw_gid; /* group id */ string pw_gecos<>; /* in real life name */ string pw_dir<>; /* home directory */ string pw_shell<>; /* default shell */ }; struct yppasswd { string oldpass<>; /* unencrypted old password */ passwd newpw; /* new passwd entry */ };
這聲明了一個 RPC YP 密碼更新過程,它接受一個
yppasswd
結構作為參數並返回一個int
. 該文件還描述了yppasswd
結構本身,以及passwd
它使用的結構。這些文件通常用於
rpcgen
生成存根伺服器和客戶端程式碼,然後可用於實現協議的 RPC 伺服器和/或 RPC 客戶端。它甚至可以生成範例客戶端和伺服器程式碼。正如Kusalananda所指出的,
rpcgen(1)
聯機幫助頁有更多資訊。