关于C中的开函数

laawzig2  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(87)
#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)

s5a0g9ez

s5a0g9ez1#

write(2)操作成功后,文件偏移量指示符将向前移动写入的字节数。
在这里,文件被关闭以重置偏移指示符。您可以调用lseek(2)而不是close(2)来重新定位它。

相关问题