分类: LINUX
2008-10-14 11:51:20
dup和dup2函数:int dup(int filedes); int dup2(int filedes,int filedes2);
返回:若成功为新的文件描述符,若出错为-1
作用:用来复制一个文件描述符,经常用来重定向进程的stdin,stdout,stderr。
由dup返回的新文件描述符一定是当前可用文件描述符中最小数值,该新的描述符是传递给它的描述符的拷贝,这意味着这两个描述符共享同一个数据结构。用dup2则可以用filedes2参数指定新描述符的数值,如果filedes2已经打开,则先将其关闭,如果filedes等于filedes2,则dup2返回filedes2,而不关闭它。
范例:
#include
#include
#include
#include
#include
#include
int main(void)
{
int fd;
int fddup;
int fddup2;
char buf1[]="Hello, world!";
char buf2[50];
if((fd=open("/home/sam/helloworld",O_CREAT|O_TRUNC|O_RDWR,0666))==-1)
{
printf("Open or create file named \"helloworld\" failed.\n");
exit(1);
}
printf("%d\n",fd);
write(fd,buf1,sizeof(buf1));
close(fd);
if((fd=open("/home/sam/helloworld",O_RDONLY))==-1)
{
printf("Open file named \"helloworld\" failed.\n");
exit(1);
}
printf("%d\n",fd);
fddup=dup(fd);
fddup2=dup2(fd,8);
printf("%d\n",fddup);
printf("%d\n",fddup2);
read(fddup2,buf2,sizeof(buf2));
printf("%s\n",buf2);
close(fd);
close(fddup);
close(fddup2);
return 0;
}