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", O_RDONLY);

2.open..close..dup..close

 先fd=open(file),打开stdin要重定向的文件,返回一文件描述符,不过它不是0,因为0还在当前被打开了。

close(0)关闭0

dup(fd),复制文件描述符fd,此次复制使用最低可用文件描述符号。因此获得的是0.于是磁盘文件和0连接一起了。

close(fd).

3.open..dup2..close.

下面说说dup的函数

dup   dup2

#include <fcntl.h>

newfd = dup(oldfd);

newfd = dup2(oldfd, newfd);  oldfd需要复制的文件描述符,newfd复制oldfd后得到的文件描述符

return    -1:error   newfd:right

 1 /* whotofile.c
 2  * purpose: show how to redirect output for another program
 3  *    idea: fork, then in the child , redirect output , then exec
 4  */
 5 #include <stdio.h>
 6 #include <fcntl.h>
 7 int main(void) {
 8   int pid, fd;
 9   printf("About to run the who.\n");
10   if((pid=fork()) ==-1){
11     perror("fork");
12     exit(1);
13   }
14   if(pid==0) {
15     //    close(1);
16     fd = creat("userlist", 0644);
17     close(1);
18     dup2(fd, 1);
19     execlp("who", "who", NULL);
20     perror("execlp");
21     exit(1);
22   }
23   if(pid!=0) {
24     wait(0);
25     printf("Done running who. results in userlist.\n");
26   }
27   return 0;
28 }

内核总是使用最低可用文件描述符;

文件描述符集合通过exec调用传递,而且不会被改变。

时间: 2024-08-25 23:29:52

Linux_C 输入输出重定向的相关文章

Python 输入输出重定向

#基于Python2.7 #若是想Python做到和C++中freopen一样的输入输出重定向效果,即从文件输入输出,可以在程序中加入以下代码 1 import sys 2 sys.stdin=open('in.txt','r') 3 sys.stdout=open('out.txt','w')

CentOS下输入输出重定向

nux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linux默认输入是键盘,输出是显示器.你可以用重定向来改变这些设置.比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了.输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果.重定向操作符可以用来

8.1 shell 介绍、8.2 命令历史、8.3 命令补全与别名、8.4 通配符、8.5 输入输出重定向

8.1 sehll 介绍 什么是shell shell 是一个命令解释器,提供用户和机器之间交互 支持特定的语法,比如逻辑判断,循环. 每个用户都可以有自己特定的shell. centos7 默认的shell 为bash( Bourne Agin shell ) 还有zsh ,ksh等 8.2 命令历史 /root/.bash_history ;命令历史放置文件 [[email protected] ~]# ls /root/.bash_history/root/.bash_history [[

8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向

8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 # Linux shell 基础 # 8.1 shell 介绍 - 什么是shell 1. shell 是一个命令解释器,提供用户和机器之间的交互 2. 支持特定语法,比如逻辑判断.循环 3. 每个用户都可以有自己特定的shell 4. CentOS7 默认shell 为bash (Bourne Agin Shell) 5. 还有zsh.ksh等 ``` [[email protected]

linux shell编程之bash别名、快捷键及输入输出重定向

命令别名:alias 让别名永远生效: 命令执行顺序: bash快捷键: 输入输出重定向: 正确和错误都保存到文件: 输出重定向:(除了给软件包打补丁时使用,一般不用)

3_Shell语言———输入输出重定向和管道概述

一.输入重定向和输出重定向 通常计算机的I/O(输入/输出)设备为键盘和显示器,因此当我们执行cat命令而不加任何参数时,命令会等待用户通过键盘输入数据:而当我们为cat命令增加了参数/etc/rc.d/rc.sysinit后,cat命令的输入源变成了文件/etc/rc.d/rc.sysinit.这个过程就是输入重定向.如果cat的结果不显示在屏幕中,而是输出到某个文件中,其过程就是输出重定向. 二.管道 管道事实上是一种重定向的过程.管道的一方是数据的输入端,一方是接收端.bash也支持管道,

C标准输入输出重定向

C中的标准输入输出可以进行重定向到文件. 示例程序:(C Primer Plus示例8.2) // echo_eof.c -- 重复输入,直到文件的结尾 #include <stdio.h> int main(void) { int ch; while ( (ch = getchar()) != EOF) putchar(ch); return 0; } 编译运行.在终端中运行: >echo_eof.exe 则标准输入输出为键盘和显示屏. 同样的,将标准输入重定向到文件echo_eof.

实验理解Linux SHELL 输入输出重定向

在shell脚本中发现>/dev/null 2>&1这样的语句,以前没有去深入地理解这个命令的作用,这个命令和 2>&1 >/dev/null有什么区别?通过实验理解这两个命令及shell输入输出重定向的重点. shell重定向介绍 我们一般在使用shell命令的时候,多是通过键盘输入,在屏幕上查看命令的执行结果(包括正常输出与错误输出).如果某些情况下,我们需要将shell命令的执行结果存储到文件中,那么我们就需要使用输入输出的重定向. 文件描述符 当执行shel

linux 标准输入输出 重定向

背景: 屏幕打印不一定都是从标准输出来的,也包括标准错误输出流stderr中的信息 文件描述符定义(系统定义了12个) 0 标准输入 1 标准输出 2 标准错误 0 默认键盘输入 1,2默认从屏幕打印,可以重定向到其他文件 参考: 流,管道重定向[IBM]: http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-4/ 重定向执行顺序:http://blog.chinaunix.net/uid-25324849-id-3141027.h