#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int in_fd = open("here_doc.tmp", O_CREAT | O_RDWR | O_TRUNC, 0644);
int out_fd = open("outfile", O_CREAT | O_RDWR | O_APPEND, 0644);
write(in_fd, "hello 1n", 8);
write(in_fd, "Pello 1n", 8);
write(in_fd, "Yello 1n", 8);
/* ********* I wonder why the two line below are necessary ******* */
close(in_fd);
in_fd = open("here_doc.tmp", O_RDWR, 0644);
dup2(in_fd, 0);
dup2(out_fd, 1);
close (in_fd);
close (out_fd);
char *argv[]= {"cat", NULL};
execve("/bin/cat", argv, NULL);
}
我想让代码像"<lt;(heredoc)";所以我练习如何使用";开放函数";
我认为open("here_doc.tmp, some_option)
只需要一次。
它可以在这里创建_doc.tmp并写得很好,但不能传输到execve
然后我知道要让它正常工作,我需要加上那两行,但我不知道为什么我想知道为什么这些是必要的
(叮当1200.0.3.228)
成功执行write(2)
操作后,文件偏移量指示器向前移动写入的字节数。
在这里,文件被关闭,以便重置偏移指示器。您可以调用lseek(2)
而不是close(2)
来重新定位它。