dup/dup2输出重定向

函数原型:
#include
int dup(int oldfd);
int dup2(int oldfd,int newfd);
dup用来复制oldfd所指的文件描述符。但复制成功时返回最小的尚未被使用的文件描述符。若有错误则返回-1,错误代码存入errno中。返回的新文件描述符和参数oldfd指向同一个文件,共享所有的锁定,读写指针,和各项权限或标志位。.h>

1.打开一个新文件.h>

2.关掉标准输出文件符.h>

3.调用dup给文件描述符.h>

4.此时文件描述符变为1.h>

5.将所要打印数据重定向到文件中。.h>

#include<stdio.h>                                                                      
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#define _PATH_FILE_  "./log"
int main()
{
    umask(0);
    int fd=open(_PATH_FILE_,O_CREAT|O_RDWR,0644);
    if(fd<0){
        perror("open");
        return 1;
    }
    close(1);
    int new_fd=dup(fd);
    close(fd);
    int count=0;
    while(count++<100)
    {
        printf("helo world\n");
    }
    fflush(stdout);//must,printf重定向后变为全缓冲,缓冲区满才会刷新,导致不会写入文件
    close(new_fd);
    return 0;
}
时间: 2024-10-25 14:10:38

dup/dup2输出重定向的相关文章

UNIX 系统调用:dup,dup2实现重定向

重定向一般在命令行里就是把原本输出到屏幕的数据转而输出到一个指定的文件当中.如 1 $ pwd > workdir.txt 此时workdir.txt内就存储了pwd命令的输出,当前所在的工作目录 默认情况下printf总是把内容输出到进程的打开文件表述符编号为1的对应的文件中(0-标准输入,1-标准输出,2-标准错误输出),通过这些数字索引可以在进程的打开文件表中找到对应的项.实现输入输出重定向只要把标准输入输出对应的表项替换即可.可以通过dup,dup2系统调用进行.它们的作用都是把指定索引

APUE之dup,dup2函数重定向标准输出实例

目的:重定向标准输出到一个文件之中. 定义这两个函数的头文件是 unistd.h  这个头文件同时定义了下面三个常量: * STDIN_FILENO = 0 标准输入 * STDOUT_FILENO = 1 标准输出 * STDERR_FILENO = 2 标准出错输出 dup和dup2函数 #include <unistd.h> int dup (int filedes); int dup2 ( int filedes,int filedes2); 两函数的返回值:若成功则返回新的文件描述符

dup/dup2

dup函数复制oldfd描述符给一个新的描述符,即这个新的文件描述符指向oldfd所拥有的文件表项.这个新的描述符是未被使用的最小的描述符,dup函数返回这个描述符 dup2函数和dup函数类似,它们的区别就是dup2可以用newfd参数指定新的描述符,如果newfd描述符已经打开,则覆盖;如果newfd等于oldfd,则dup2直接返回newfd. 这两个函数返回的新文件描述符和参数oldfd描述符共享同一文件表项 函数原型: #include<unistd.h>int dup(int ol

linux下dup/dup2函数的用法

系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符. 他的原型如下: #include <unsitd.h> int dup(int oldfd); int dup2(int oldfd,int newfd); dup 和dup2都是返回新的描述符.或者返回-1并设置 errno变量.新老描述符共享文件的偏移量(位置)

dup/dup2函数学习

dup/dup2函数用来实现文件描述符之间的拷贝.对此,先来看看函数的声明: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); dup函数 dup函数传入一个文件描述符,oldfd必须是已打开的文件描述符,否则dup函数调用失败.返回值为当前系统可用的最小文件描述符.测试程序如下: #include <stdio.h> #include <string.h> #include

dup,dup2函数【转】

转自:http://eriol.iteye.com/blog/1180624 转自:http://www.cnblogs.com/jht/archive/2006/04/04/366086.html dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr.这两个函数的原形如下: C代码   #include <unistd.h> int dup( int oldfd ); int dup2( int old

文件描述符的复制——实现输出重定向

dup(2)   dup2(2) #include <unistd.h>int dup(int oldfd);功能:复制文件描述符参数:oldfd:指定源文件的描述符返回值:错误 -1 errno被设置成功 返回新的文件描述符 新的文件描述符使用未使用的.最小的文件描述符 int dup2(int oldfd, int newfd);功能:复制文件描述符参数:oldfd:源描述符newfd:目的描述符返回值:错误 -1 errno被设置成功 返回新的文件描述符 1 //利用dup和dup2完成

输出重定向与输入重定向

三种工作中最长用到的输出重定向方法: 以ls /home 为例:(下面的两种方法都是把正确的输出结果和错误的输出结果都保存到abc.log文件中) ① ls /home >> abc.log 2>&1 ② ls /home &>> abc.log 还有一种就是充当垃圾回收站的输出方法: ls /home >> /dev/null 输入重定向: wc -l 显示行数 -w 显示多少英文单字 -c 统计字节数 使用方法很简单,自己试着在终端敲一下就会了

Linux中的输出重定向

标准输入输出: 键盘        /dev/stdin        0       标准输入 显示器    /dev/stdout      1       标准输出 显示器    /dev/stderr       2       错误输出 输出重定向 正确输出: 命令 > 文件 以覆盖的形式,把命令的正确输出写入指定文件中 命令 >> 文件 以追加的形式,把命令的正确输出写入指定文件中 错误输出: 命令 2> 文件 以覆盖的形式,把错误信息写入指定文件中 命令 2>&