Evince는 PDF를 열 때 어떤 시스템 호출을 사용합니까?

Evince는 PDF를 열 때 어떤 시스템 호출을 사용합니까?

시스템 호출을 연결하기 위해 Linux 커널 모듈을 사용하려고 합니다. 그러나 Evince를 사용하여 PDF 파일을 열면 open가 없고 이 특정 파일 read에는 .writelstat

여기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 문서의 페이지 수를 세는 증거라고 생각합니다. 파일.

관련 정보