使用LINUX dup2 复制文件描述符到标准输出STDOUT_FILENO

  7 
  8 #include<stdio.h>
  9 #include <sys/types.h>
 10 #include <sys/stat.h>
 11 #include <fcntl.h>
 12 #include <stdlib.h>
 13 #include <unistd.h>
 14 
 15 
 16 
 17 int main(int argc,char *argv[])
 18 {
 19     int fd;
 20     char ch;
 21     setbuf(stdout, NULL);
 22     if(argc<2)
 23     {
 24         printf("one file need!\n");
 25         exit(0);
 26     }
 27     fd=open(argv[1],O_CREAT|O_RDWR,0777);
 28     if(fd==-1)
 29     {
 30         perror("create error:");
 31     }
 32     dup2(fd,STDOUT_FILENO);
 33     close(fd);
 34     printf("testh is test");
 35 }

dup2(fd,STDOUT_FILENO); 这一行 代表我们将STDOUT_FILENO 也就是文件描述符1 复制为我们新建的文件的文件描述符
这种情况下我们PRINTF就不能输入信息到屏幕上了,而是写入到文件

时间: 2024-10-07 11:57:57

使用LINUX dup2 复制文件描述符到标准输出STDOUT_FILENO的相关文章

Linux下利用文件描述符恢复的成功失败实验

    数据误删除是作为初级运维人员常常遇到的"低级错误",一些有经验的老手有时也在疲劳.不冷静的情况下"马失前蹄".一旦误删除数据文件,尽快采用影响最小.最迅速的手段恢复数据库是第一要务. 恢复数据的方法很多,比如冷热备份.闪回数据库等等,如果是直接从操作系统OS层面删除数据文件,在Linux/Unix环境下,有一些优选手段可以使用.其中之一就是文件描述符(File Description).   1.聊聊File Description   不同的操作系统,在实

简介Linux下的文件描述符

在C程序中,文件由文件指针或者文件描述符表示.ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O函数(open, close, read, write, ioctl)使用文 件描述符.下面重点来说下,文件描述符是如何工作的. 文件描述符相当于一个逻辑句柄,而 open,close等函数则是将文件或者物理设备与句柄相关联.句柄是一个整数,可以理解为进程特定的文件描述 符表的 索引.先介绍下面三个

linux exec和文件描述符妙用技巧(转)

  最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的.文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表.当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数.通常,一个进程启动时,都会打开 3 个文件

更改linux的最大文件描述符限制

To ensure good server performance, the total number of client connections, database files, and log files must not exceed the maximum file descriptor limit on the operating system (ulimit -n). By default, the directory server allows an unlimited numbe

文件描述符-关于Linux中的dup2()

问题描述 关于Linux中的dup2() UNIX高级编程中,第三章习题中说道:dup(fd0);dup(fd1);dup(fd2);if (fd >2)close(fd);为什么当fd > 2时需要关闭?我查找了答案,说是当fd为3时,有4个文件描述符指向同一文件表项,所以要关闭3,难道同一个文件表项的最大只支持3个文件描述符? 解决方案 首先,上面应该是dup2(fd0);dup2(fd1);dup2(fd2);这样做的是重定向0.1.2(即标准输入.输出.出错)到一个fd中. 明白了上面

Linux内核中的文件描述符

Kernel version:2.6.14 CPU architecture:ARM920T 作为文件的使用者,进程理所当然的要将所使用的文件记录于自己的控制块中,也就是task_struct.另外,由于进程所对应的程序也是一个文件,因此进程控制块还必须记录这个文件的相关信息.由于OS要对所有进程提供服务,因此OS还要维护一个记录所有进程打开的文件的总表. 1.文件对象 当进程通过open系统调用打开一个文件时,该系统调用找到这个文件后,会把文件封装到一个file结构的实例中提供给进程,这个实例

[性能分析]linux文件描述符(转)

1.什么是文件和文件描述符   Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件

linux系统编程基础(三)文件描述符file descriptor与inode的相关知识

每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process Control Block).task_struct中有一个指针(struct files_struct *files; )指向files_struct结构体,称为文件 描述符表,其中每个表项包含一个指向已打开的文件的指针,如下图所示. 用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述

Linux中通过Socket文件描述符寻找连接状态介绍

  Proc虚拟文件系统下面有许多数字命名的子目录,这些数字表示系统当前运行的进程号; 其中/proc/N/fd目录下面保存了打开的文件描述符,指向实际文件的一个链接.如下: 代码如下: [root@XXXXXXX_10_1_17_138 song_test]# ll /proc/25465/fd total 0 lrwx------ 1 root root 64 Apr 14 09:36 0 -> /dev/pts/4 (deleted) lrwx------ 1 root root 64 A