Files
Linux-C-Notes/C13-IO/sys/dup.c

51 lines
942 B
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define FNAME "/tmp/out"
int main(int argc, char **argv)
{
int fd;
/***
* bug:
* 1. 假如默认没有1这里有bug。
* 2. 假如这个非原子操作的操作的过程,有可能被别的进程影响。
*/
fd = open(FNAME, O_WRONLY | O_CREAT | O_TRUNC, 0600);
if (fd < 0)
{
perror("open");
exit(1);
}
// close(1);
// dup(fd);
dup2(fd, 1);
// 使用 dup2 原子操作
// 且dup2如果两个参数相等不会做任何事
// !!!
if (1 != fd)
close(fd);
#if 0
close(1);
fd = open(FNAME, O_WRONLY | O_CREAT | O_TRUNC, 0600);
if (fd < 0)
{
perror("open");
exit(1);
}
#endif
/********************************************************************/
puts("hello!");
// TODO: 将sdtout回到终端
exit(0);
}