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
linux重定向重定向标准输出和标准错误,两种格式: &>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 \n document \n delimite
参考:
1. man 3 stdin

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。