Linux_C dup()

 1 /*
 2  * stdinredir2.c
 3  * shows two more methods for redirecting standard input
 4  * use #define to set one or the other
 5  */
 6 #include <stdio.h>
 7 #include <fcntl.h>
 8 /*#define CLOSE_DUP  /*open, close, dup, close */
 9 /*#define USE_DUP2   /*opne, dup2, close */
10 int main(void) {
11   int fd, newfd;
12   char line[100];
13   //read and print lines
14   fgets(line, 100, stdin);
15   printf("line: %s", line);
16
17   fd=open("/home/wiz/wizcode/psh1.c", O_RDONLY);  /* open the disk file */
18
19   #ifdef CLOSE_DUP
20      close(0);
21      newfd=dup(fd);              /*copy open fd to 0*/
22   #else
23      newfd=dup2(fd,0);           /*close 0, dup fd to 0*/
24   #endif
25   if(newfd!=0){
26     fprintf(stderr, "Could not duplicate fd to 0\n");
27     exit(1);
28   }
29   close(fd);
30   fgets(line, 100, stdin); printf("%s", line);
31   fgets(line, 100, stdin); printf("%s", line);
32   fgets(line, 100, stdin); printf("%s", line);
33   return 0;
34 }
时间: 2024-12-27 18:50:31

Linux_C dup()的相关文章

Linux系统开发 3 文件系统开发 文件/目录

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] Linux系统开发 文件操作 ext2文件系统了解 stat()函数 access()函数 chmod()函数 utime()函数 truncate()函数 link()硬链接函数 symlink()软链接函数 readlink()函数 unlink函数 rename函数() 目录操作 chdir()/fchdir() getcwd/getwd()/get_current_dir_name() pathco

UNIX环境编程学习笔记(4)——文件I/O之dup复制文件描述符

lienhua342014-08-23 UNIX 提供了两个函数 dup 和 dup2 用于复制一个现存的文件描述符. #include <unistd.h> int dup(int filedes); int dup2(int filedes, int filedes2); 返回值:若成功则返回新的文件描述符,如出错则返回-1. 由 dup 函数返回的文件描述符一定是当前可用文件描述符中的最小描述符.用 dup2 函数则可以通过参数 filedes2 指定目标文件描述符.如果filedes2

Linux_C 输入输出重定向

将stdin定向到文件有3种方法: 1.close then open .类似挂断电话释放一条线路,然后再将电话拎起来从而得到另一条线路. 先close(0);将标准输入关掉,那么文件描述符数组中的第一个元素处于空闲状态.(一般数组0=stdin, 1=stdout, 2=stderror,如果不关闭那么进程请求一个新的文件描述符的时候系统内核将最低可用的文件描述符给它,那么就是2以后的元素,关掉0,就分配了0给新进程). close(0);  fd=open("/etc/passwd"

dup和dup2函数

dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr.这两个函数的原形如下: #include <unistd.h> int dup( int oldfd ); int dup2( int oldfd, int targetfd ); dup()函数 利用函数dup,我们可以复制一个描述符.传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝.这意味着,这两个描述符共

Unix 网络编程 dup和dup2函数

dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr.这两个函数的原形如下: #include <unistd.h> int dup( int oldfd ); int dup2( int oldfd, int targetfd ); dup()函数: 利用函数dup,我们可以复制一个描述符.传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝.这意味着,这两个描述符

文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write

文件操作篇 close creat dup dup2 fcntl flock fsync lseek mkstemp open read sync write close(关闭文件) 相关函数 open,fcntl,shutdown,unlink,fclose 表头文件 #include<unistd.h> 定义函数 int close(int fd); 函数说明 当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源.参数fd为

0723------Linux基础----------文件 IO 之 dup、dup2 和 fcntl 函数

1. dup 函数 1.1 dup 函数用来复制一个文件描述符,复制后的文件描述符可以正常使用(见例1).dup函数返回当前文件描述符表中一个最小的可用的文件描述符(Linux下分配文件描述符的规则是:寻找最小可用),这个过程由系统来完成.dup函数成功执行后,两个文件描述符fd_1 和 fd_2 指向同一个文件表项,因它们共享偏移量(文件数据结构图见Unix环境高级编程),在内核中的数据结构表示为:1个进程表项,1个文件表项(这里两个文件描述符指向同一个文件表项),1个V结点.文件表项中有一个

dup和fork函数执行后的文件情况

dup和fork函数执行后的文件情况 转自http://blog.csdn.net/shanshanpt/article/details/39049579 对于dup和fork函数来说,前者是复制一个文件描述符,后者是复制进程,同时相关的文件信息也会被复制. 一.对于Dup 之前已经知道,对于一个进程来说,有一个files_struct来管理所有的相关文件,最终的反应形式其实就是一个文件数组而已: 所谓文件描述符就是数组下标.Dup函数总是从数组第一个元素开始扫描,获取第一个可用的文件描述符(也

VFS dup ,dup2

Linux支持各种各样的文件系统格式,如ext2.ext3.reiserfs.FAT.NTFS.iso9660等等,不同的磁盘分区.光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件.目录.读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象