在bash中重定向stdout与使用fprintf(速度)在c中写入文件
发布时间:2020-12-16 01:28:30 所属栏目:安全 来源:网络整理
导读:我想知道哪个选项基本上更快. 最让我感兴趣的是重定向机制.我怀疑该文件是在程序开始时打开的./program文件并在最后关闭.因此,每当程序输出一些东西时,它应该只是写入文件,就像听起来一样简单.是这样吗?然后我猜两种选择在速度方面都应该具有可比性. 或者它
我想知道哪个选项基本上更快.
最让我感兴趣的是重定向机制.我怀疑该文件是在程序开始时打开的./program>文件并在最后关闭.因此,每当程序输出一些东西时,它应该只是写入文件,就像听起来一样简单.是这样吗?然后我猜两种选择在速度方面都应该具有可比性. 或者它可能是一个更复杂的过程,因为操作系统必须执行更多操作?
这些选项之间没有太大区别(除了将文件作为严格选项降低了程序的灵活性).
为了比较这两种方法,让我们检查一下神奇实体FILE *背后的内容: 所以在这两种情况下我们都有一个FILE *对象,一个文件描述符fd – 一个到OS内核的网关和内核基础设施,提供对文件或用户终端的访问,这应该是(除非libc特别为stdout或内核提供了一些特殊的初始化程序)处理fd = 1的文件. 与fopen()相比,bash重定向如何工作? 当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区别在于文件描述符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |