Ubuntu

Evince 使用什麼系統呼叫來打開 pdf?

  • November 23, 2018

我曾嘗試使用 linux 核心模組來掛鉤系統呼叫。但是,當我使用 Evince 打開一個 pdf 文件時,我發現 no open, readand writeis used on this specific file, only lstatis 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一直到文件末尾(以確定文件大小),然後從那裡讀取幾個數據塊。我認為這是有關文件中頁面的資訊。

以下preads 發生在文件中間的偏移處,但所有這些似乎都以有關“頁面”的一些資訊開頭,所以我認為這表明 PDF 文件中的頁面,可能使用它從文件的結尾。

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