Ubuntu
Evince 使用什麼系統呼叫來打開 pdf?
我曾嘗試使用 linux 核心模組來掛鉤系統呼叫。但是,當我使用 Evince 打開一個 pdf 文件時,我發現 no
open
,read
andwrite
is used on this specific file, onlylstat
is used。這是
strace
日誌strace evince folder1/test.pdf
open
所以我想知道 evince對文件使用什麼系統呼叫read
?
正如@ThomasDickey 所指出的,您需要傳遞
strace
該-f
選項,以便包括所有執行緒的跟踪。(
clone()
系統呼叫正在創建新執行緒,而不是程序,但您仍然需要跟隨-f
執行緒。)strace
一旦你關注了所有執行緒,
open
就會變成一個父級,在文件描述符 19 上以只讀模式打開文件:open("/home/xytao/folder1/test.pdf", O_RDONLY) = 19
文件的內容是通過對一個 256 字元的小緩衝區的連續
pread
呼叫來讀取的,其中第一個獲取%PDF-1.3
標題:pread(19, "%PDF-1.3\r\n%\241\263\305\327\r\n3 0 obj\r\n<</Fil"..., 256, 0) = 256
如果您通過跟踪,您會看到它會
lseek
一直到文件末尾(以確定文件大小),然後從那裡讀取幾個數據塊。我認為這是有關文件中頁面的資訊。以下
pread
s 發生在文件中間的偏移處,但所有這些似乎都以有關“頁面”的一些資訊開頭,所以我認為這表明 PDF 文件中的頁面,可能使用它從文件的結尾。