UNIX 命令中的隐式系统调用

UNIX 命令中的隐式系统调用

我一直在研究 UNIX 和系统调用,遇到了一些低级且棘手的问题。问题询问此命令调用了哪些系统调用:

grep word1 word2 > file.txt

我做了一些研究,但无法找到有关底层 UNIX 调用的大量资源。

然而,在我看来,答案是open(打开文件的文件描述符file.txt),然后dup2(将STDOUTof更改grep为 的文件描述符open),然后write写入STDOUTof grep(现在是 的文件描述符file.txt) ,最后,关闭...close()的文件描述符file.txt

但是,我不知道我是否正确或走在正确的道路上,任何有 UNIX 经验的人都可以在这个主题上启发我吗?

答案1

在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 系统有桁架索拉里斯,AIX, ETC。)。

相关内容