目录
一、管道和重定向命令
1.1、管道命令 |
- 前一个命令的输出作为后一个命令的输入
- 可以叠加
$ ps -u
$ ps -u | grep pts
$ ps -u | grep pts | grep pts/0
1.2、重定向命令 < , > , >>
-
输入: <
-
输出: >
-
追加的方式输入: >>
#include <stdio.h> int main(int argc,char *argv[]) { //从标准输入中获取 char str[1024]; scanf("%s",str); //往标准输出中打印argc argv printf("argc = %d\n",argc); for(int i = 0;i<argc;i++){ fprintf( stdout, "%s\n", argv[i]); } printf("%s\n",str); //往标准错误中打印 fprintf(stderr,"this is stderr\n"); return 0; }
#不重定向 $ ./test #重定向 执行后不会打印出来,不用再输入参数 $ ./test01 0<in.txt 1>out.txt 2>err.txt #以追加的方式重定向,不会清空原文件 $ ./test01 2>>err.txt #要将文本输入到标准输入 只能用 0<xxx.txt :<<annotation 标准输入 stdin 0 标准输出 stdout 1 标准错误 stderr 2 annotation
-
结论
重定向由shell实现
重定向符号和重定向文件不是参数
二、重定向编程
2.1、close then open
1、先关闭标准输出的文件描述符
2、再打开一个文件
3、这个文件的文件描述符就变成了1,从而实现重定向功能
- 每次获取文件描述符,系统总会分配最小且可用的描述符
- 适用于有文件名的情况
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
int main(int argc,char *argv[]) {
//输出到标准输出
char buf[] = "1234567890\n";
write(1,buf, sizeof(buf) - 1 );//sizeof会计算 \0
//关闭标准输出,重定向到指定文件
close(1);
int fd = open("./out.txt"