首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Evince使用什么系统调用来打开pdf?

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

Unix & Linux用户
提问于 2018-11-23 01:00:58
回答 1查看 157关注 0票数 2

我尝试过用linux内核模块挂起系统调用。但是,当我使用Evince打开一个pdf文件时,我发现在这个特定的文件上没有使用openreadwrite,只使用lstat

这里strace evince folder1/test.pdfstrace日志

所以,我想知道evince从文件中对openread使用了什么系统调用?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-23 03:12:23

正如@ThomasDickey所指出的,您需要传递strace -f选项,以便包含所有线程的跟踪。

( clone()系统正在创建新线程,而不是进程,但您仍然需要-fstrace跟随螺纹。)

一旦跟踪所有线程,open就会分离,在文件描述符19上以只读模式打开文件:

代码语言:javascript
复制
open("/home/xytao/folder1/test.pdf", O_RDONLY) = 19

文件的内容是使用连续的pread调用读取到一个小的256个字符缓冲区中的,第一个缓冲区获取%PDF-1.3头:

代码语言:javascript
复制
pread(19, "%PDF-1.3\r\n%\241\263\305\327\r\n3 0 obj\r\n<</Fil"..., 256, 0) = 256

如果您遍历跟踪,您将看到它将lseek到文件的末尾(以确定文件大小),然后从那里读取几个数据块。我想这是关于文档中的页面的信息。

下面的preads发生在文件中间的偏移量,但它们似乎都是以有关“页面”的一些信息开始的,因此,我猜想这是因为它说明了PDF文档中的页面,可能使用了从文件末尾得到的偏移量。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/483562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档