System-Calls

UNIX 命令中的隱式系統呼叫

  • April 13, 2016

我一直在研究 UNIX 和系統呼叫,遇到了一個低級且棘手的問題。該問題詢問此命令呼叫了哪些系統呼叫:

grep word1 word2 > file.txt

我進行了一些研究,但無法在底層 UNIX 呼叫上找到大量資源。

但是,在我看來,答案是open(打開文件的文件描述符file.txt),然後dup2(將 of 更改為STDOUTgrep文件描述符open),然後write寫入STDOUTof grep(現在是 的文件描述符file.txt) ,最後,關閉…close()的文件描述符file.txt

但是,我不知道我是對的還是走在正確的道路上,有 UNIX 經驗的人可以在這個話題上給我啟發嗎?

在 Linux 中,您有strace

strace -f sh -c 'grep word1 file > file.txt'

這裡我們用-ftellstrace來跟踪子程序。

在 *BSD 中,您有dtruss(使用dtrace底層):

dtruss -f sh -c 'grep word1 file > file.txt'

OSX 有trace. 歷史上的 Unix 系統有trussSolarisAIX等)。

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