zoukankan      html  css  js  c++  java
  • linux标准输入输出

    #include <stdio.h>
    extern FILE *stdin;
    extern FILE *stdout;
    extern FILE *stderr;
    
    • 通常linux程序启动后都会有这3个打开的输入输出流,叫标准I/O流。
    • 对应的文件描述符为STDIN_FILENO(0),STDOUT_FILENO(1),STDERR_FILENO(2)
    • 文件描述符是内核的,文件句柄FILE 是库对文件描述符的封装,子进程可以继承文件描述符,但不继承文件句柄。
    • 通常 stdin,stdout,stderr 用宏来实现的,对它们直接赋值不具有可移植性,标准做法是通过freopen(3)来重新打开。
    • stderr无缓冲,stdout是行缓冲

    控制终端 controlling terminal
    /dev/tty 是一个进程的控制终端


    nohup

    • 让程序不受 hangups 信号影响,输出到non-tty
    • 如果标准输入是终端,就重定向到 /dev/null。如果标准输出是终端,就重定向到 nohup.out 文件。标准错误重定向到标准输出。
    • 要将输出保存到文件,用 "nohup COMAND > FILE"

    shell重定向

    • 命令执行前,输入和输出可以用shell特定的符号重定向。
    • 从左到右按顺序执行重定向, ls > dirlist 2>&1 会将标准输出和标准错误都重定向到文件 "dirlist" 中, ls 2>&1 > dirlist 只会将标准输出重定向到文件中。
    • 如果重定向符号前不是文件描述符,而是一个变量名,shell会申请一个大于10的文件描述符给这个变量名。如果是 >&- 或 <&- 之前有变量,表示的是要关闭的文件描述符
    • 如果忽略文件描述符,< 符号之前表示省略标准输入,> 符号之前表示省略标准输出。
    • 使用大于9的文件描述符要小心,可能会跟shell内部使用的冲突
    • 重定向输入,[n]<word,在文件描述符n上打开word表示的文件来读取。没有n,表示打开到标准输入
    • 重定向输出,[n]>word,在文件描述符n上打开word表示的文件来写入。没有n,表示打开标准输出到文件 word
    • 重定向追加,[n]>>word
    • 重定向标准输出和标准错误,两种格式: &>word, 或者 >&word,推荐前一个,跟 >word 2>&1 的作用一样
    • 重定向追加标准输出和标准错误, &>>word, 跟 >>word 2>&1 的作用一样
    • 复制文件描述符,[n]<&word,复制输入文件描述符,在文件描述符 n 上复制文件word。如果 word-,表示要关闭 n。 [n]>&word表示在文件描述符n上复制输出文件word。比如2>&1表示关闭2,并将1复制到2上,复制的意思是,2跟1一样,现在都指向1对应的标准输出。不管是输入还是输出,最终目标都指向后一个文件。比如 2>&1,最后都指向1,表示2也指向1,程序对2的输出,也输出到1。
    • 移动文件描述符,[n]<&digit-,表示移动digit到文件描述符n。移动后,digit文件会被关闭,n表示之前打开的文件。[n]>digit-也一样
    • 打开文件描述符来读写,[n]<>word,用描述符n打开文件来读写,省略n表示用标准输入。
    • here document, << delimiter document delimite

    参考:

    1. man 3 stdin
  • 相关阅读:
    JS中的call、apply、bind 用法解疑
    style、currentStyle、getComputedStyle(不同浏览器获取css样式)区别介绍
    Ajax 整理总结(进阶)
    Ajax 整理总结(入门)
    js_面向对象编程
    李炎恢bootstarp_项目实战__瓢城企业(注释+源码)
    bootstrap学习笔记--bootstrap排版类的使用
    bootstrap学习笔记--bootstrap网格系统
    对mysql快速批量修改,查重
    MyISAM 和 InnoDB 的区别与优化
  • 原文地址:https://www.cnblogs.com/suntus/p/15208244.html
Copyright © 2011-2022 走看看