我正在嘗試為那些擴展屬性系統呼叫實作 Rusty 包裝器,如果保證它們是 UTF-8 編碼的,那么我可以使用 type String,或者我必須使用OsString.
我google了很多,但只找到這兩個頁面:
freedesktop:CommonExtendedAttributes說:屬性字串應該是 UTF-8 編碼。
macOS 手冊頁
setxattr(2)說:擴展屬性名稱是簡單的以 NULL 結尾的 UTF-8 字串似乎這告訴我們
name保證在 macOS 上是 UTF-8 編碼的,
我想知道盡可能多的平臺上的資訊,因為我試圖在我的實作中涵蓋它們。
uj5u.com熱心網友回復:
不,在 Linux 中,它們絕對不能保證是 UTF-8。甚至根本不保證屬性值是字串。它們只是位元組陣列,對它們沒有任何限制。
int setxattr(const char *path, const char *name,
const void *value, size_t size, int flags);
const void *value, size_t size不是將字串傳遞給函式的好方法。const char* name是,并且屬性名稱確實是字串,但它們是以空字符結尾的位元組字串。
Freedesktop 建議就是這樣,建議。他們不會阻止任何人創建他們想要的任何屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514450.html
