C

/usr/include 中的 .x 文件是什麼?

  • February 10, 2017

My/usr/include包含多個具有.x文件副檔名的文件,例如/usr/include/rpcsvc/rquota.x.

它們看起來像 C 原始碼(file /usr/include/rpcsvc/rquota.x在 中執行結果C source, ASCII text),但它們不是有效的 C 原始碼(例如programversionseek 關鍵字)。

它們到底是什麼?鑑於副檔名很短,很難用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)聯機幫助頁有更多資訊。

引用自:https://unix.stackexchange.com/questions/344015