level 7
阮Tea
楼主
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://keren.blog.51cto.com/720558/170892
在前一面一篇《UNIX I/O---再谈文件描述符 》的基础上,学习一下dup2函数。先看下面的代码示例:
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
int fd;
fd = open("my.file",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(fd == -1)
{
perror("\nERROR: fail to creat my.file.");
return -1;
}
if(dup2(fd,STDOUT_FILENO) == -1)
{
perror("\nERROR: fail to redirect std output.");
return -1;
}
if(close(fd)==-1)
{
perror("\nERROR: fail to colse my.file.");
return -1;
}
if(write(STDOUT_FILENO,"HELLO",5)==-1)
{
perror("\nERROR: fail to write to file.");
return -1;
}
return 0;
}
上面一段程序是一个比较简单的创建文件、并将标准输出重定向到文件的例子。
(1)open函数打开文件,文件不存在时,根据给定的参数进行文件创建,创建以后再打开。这里open()是操作系统在系统文件表内创建了一个条目,并设置描述符表中的条目[3]。

图1
2009年12月20日 10点12分
1
在前一面一篇《UNIX I/O---再谈文件描述符 》的基础上,学习一下dup2函数。先看下面的代码示例:
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
int fd;
fd = open("my.file",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(fd == -1)
{
perror("\nERROR: fail to creat my.file.");
return -1;
}
if(dup2(fd,STDOUT_FILENO) == -1)
{
perror("\nERROR: fail to redirect std output.");
return -1;
}
if(close(fd)==-1)
{
perror("\nERROR: fail to colse my.file.");
return -1;
}
if(write(STDOUT_FILENO,"HELLO",5)==-1)
{
perror("\nERROR: fail to write to file.");
return -1;
}
return 0;
}
上面一段程序是一个比较简单的创建文件、并将标准输出重定向到文件的例子。
(1)open函数打开文件,文件不存在时,根据给定的参数进行文件创建,创建以后再打开。这里open()是操作系统在系统文件表内创建了一个条目,并设置描述符表中的条目[3]。

图1