我有一個相當特殊的文件格式可以使用: 每行以其內容的校驗和開頭,後面跟着一個換行符。帶文件功能的LD_PRELOAD
它看起來像這樣:
[CHECKSUM OF LINE_1][LINE_1]\n
[CHECKSUM OF LINE_2][LINE_2]\n
[CHECKSUM OF LINE_3][LINE_3]\n
...
我的目標:要允許任何應用程序使用這些文件的工作就像他們將與其他任何文本文件工作 - 不知道額外的校驗和在每行的開頭。
由於我使用Debian wheezy(內核3.18.26)在Linux機器上工作,我想使用LD_PRELOAD機制來覆蓋相關的文件功能。 我在https://zlibc.linux.lu/index.html上看到過類似zlibc的東西 - 解釋了它是如何工作的(https://zlibc.linux.lu/zlibc.html#SEC8)。
但我沒有明白。它們只取代文件打開功能。沒有閱讀。沒有寫信。沒有fseek。沒有。那麼它是怎樣工作的? 或者 - 我必須攔截哪些函數來處理這個文件上的每個讀或寫操作並相應地處理它們?
這聽起來像一個合理的做法。 我的假設是正確的,所有功能,如fopen,fclose,fgets,fputs,fread,fwrite等等都是庫函數,使用你提到的系統調用? 像fseek和ftell這樣的函數怎麼樣? 是否有任何其他系統調用我應該攔截以確保一切正常? –
@DanielHeinrich:我更新了答案。 – woockashek