我想知道哪个选项基本上更快。
我最感兴趣的是重定向机制。我怀疑该文件是在程序启动时打开的./program > file
并在最后关闭。因此,每次程序输出一些内容时,都应该将其写入文件,就像听起来一样简单。是这样吗?那么我想这两种选择在速度方面应该是相当的。
或者可能是更复杂的过程,因为操作系统必须执行更多操作?
这些选项之间没有太大区别(除了将文件设置为严格选项会降低程序的灵活性)。
为了比较这两种方法,让我们检查一下,魔法实体背后隐藏着什么FILE*
:
所以在这两种情况下我们都有一个FILE*
对象,文件描述符fd- 通往操作系统内核和内核基础设施的网关,提供对文件或用户终端的访问,这应该(除非 libc 有一些specialstdout 或内核的初始化程序专门处理 fd = 1 的文件)。
与 bash 重定向相比如何工作fopen()
?
当 bash 重定向文件时:
fork() // new process is created
fd = open("file", ...) // open new file
close(1) // get rid of fd=1 pointing to /dev/pts device
dup2(fd, 1) // make fd=1 point to opened file
close(fd) // get rid of redundant fd
execve("a") // now "a" will have file as its stdout
// in a
stdout = fdopen(1, ...)
当您自己打开文件时:
fork() // new process is created
execve("a") // now "a" will have file as its stdout
stdout = fdopen(1, ...)
my_file = fopen("file", ...)
fd = open("file", ...)
my_file = fdopen(fd, ...)
正如您所看到的,bash 的主要区别在于文件描述符的处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)