#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 1\n", 8);
write(in_fd, "Pello 1\n", 8);
write(in_fd, "Yello 1\n", 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);
}
我想让代码像“〈〈(heredoc)”一样工作,所以我练习如何使用“开放函数”
我认为open("here_doc.tmp, some_option)
只需要一次。
它可以创建here_doc.tmp并写入良好,但不能传输到execve
然后我知道要使它正常工作,我需要添加这两行,但我不知道为什么,我想知道为什么这些是必要的
(clang-1200.0.32.28)
1条答案
按热度按时间s5a0g9ez1#
write(2)
操作成功后,文件偏移量指示符将向前移动写入的字节数。在这里,文件被关闭以重置偏移指示符。您可以调用
lseek(2)
而不是close(2)
来重新定位它。