c - 打开描述符和关闭,为什么重要?

标签 c file-descriptor dup

我有以下代码 它打印到屏幕上:哈哈 到文件:

haha
hello
Father finished

如果我删除第 6 行和第 7 行,我会得到不同的结果 为什么?

int main()
{
// creates a new file having full read/write permissions
int fd = open("myfile", O_RDWR|O_CREAT, 0666);
write(fd, "haha\n", 5);
close(fd);                  // line 6
fd = open("myfile", O_RDWR);        // line 7
close(0);
close(1);
dup(fd);
dup(fd);
if (fork() == 0)
{
    char s[100];
    dup(fd);
    scanf("%s", s);
    printf("hello\n");
    write(2, s, strlen(s));     
    return 0;                   
}
wait(NULL);
printf("Father finished\n");
close(fd);
return 0;
}

最佳答案

尝试注释掉scanf(),重新编译并重新运行。尝试读取超出 EOF 的 scanf() 可能会在 stdio 库内部缓冲区中执行某些操作,从而导致 printf() 缓冲区在进程 _exit 时未刷新出现此问题。只是猜测...

关于c - 打开描述符和关闭,为什么重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239441/

相关文章:

C: 没有正确写入 BMP 文件

c - 复数算术无法正常工作

c++ - 快速排序后进行二进制搜索是否比线性搜索更快?

c - 这个makefile的起点在哪里

file - JENKINS 上的进程泄漏文件描述符错误

关闭文件描述符然后使用它

C套接字从接受返回的文件描述符中获取IP地址

C++ - 如何完全包装一个子进程

c - 在 C 中,如何使用 dup2 将 STDOUT_FILENO 重定向到/dev/null,然后再重定向回其原始值?

c - 使多个管道等待每个进程的返回码