Evince 使用什么系统调用来打开 pdf?

Evince 使用什么系统调用来打开 pdf?

我尝试使用 Linux 内核模块来挂钩系统调用。但是,当我使用 Evince 打开 pdf 文件时,我发现没有open,read并且write在此特定文件上使用,仅lstat使用。

这里strace的日志strace evince folder1/test.pdf

所以我想知道 evince 对文件使用什么系统open调用read

答案1

正如@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内容发生在文件中间的偏移处,但所有这些似乎都以有关“页面”的一些信息开始,因此我认为这是计算 PDF 文档中页面的证据,可能使用从文件末尾。

相关内容