システムコールを接続するために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文書のページ数を数える証拠だと思います。ファイル。