linux -- 管道和重定向

一、管道和重定向命令

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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值