关于标准输入,标准输出,标准错误

1. 为什么我们程序直接使用printf或者write(0,...)就可以输出内容,而不需要首先调用open,是因为我们的进程是shell的子进程,它直接从shell继承了文件描述符。

2.假如需要我们程序自己打开标准输入输出的话,可以这样int fd = open("/dev/tty", O_WRONLY);,需要注意的是fd的值可不一定就是0或者1,而是当前系统文件描述符未用的最小值,换句话说标准输入/输出/错误可不一定就是0/1/2。

3.为什么write(0,...)也能输出内容到屏上,按理标准输出不是fd=1吗?想想以WR方式打开一个普通文件,是不是也可以既读又写,跟此一个道理。

参照阅读:

http://bbs.chinaunix.net/thread-1376698-1-1.html

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=359433&page=1#pid2385375

https://stackoverflow.com/questions/7383803/writing-to-stdin-and-reading-from-stdout-unix-linux-c-programming

时间: 2024-08-08 01:25:24

关于标准输入,标准输出,标准错误的相关文章

python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出

看了一个博客,挺不错的.http://www.cnblogs.com/turtle-fly/p/3280519.html 标准输出(sys.stdout)对应的操作就是print(打印)了,标准输入(sys.stdin)则对应input(接收输入)操作,标准错误输出和标准输出类似也是print(打印). python最基本的操作 - 打印: print 1 其效果是把 1 写在console(命令行)里面让你看. 实际上他的操作可以理解为:把console(命令行)作为一个板子,通过sys.st

python标准输出 标准错误 重定向

1.sys.stdin  为文件对象, 当对文件对象做循环的时候,返回的为行数 2.ls > log 2>&1  标准输出和标准错误都输出到log,&> log也可以,但是会有版本限制 3.print 和stdout的区别: print 是调用一个对象的write方法,通常是stdout print会先进行格式转换 print 123456   == sys.stdout.write(str(123456)+'\n') 4.标准输出不可以为int类型, sys.stdou

[转帖]Linux的标准输入 标准输出和错误输出

https://www.cnblogs.com/softidea/p/3965093.html 感觉自己对 这一块的理解一直不好 昨天同事给了一个 bat 文件也用到了标准输入 直接通过文件进行输入 脚本参数内容 比之前写脚本参数容易的多也规整的多 今天再看 linux的标准输入和标准输出 尤其是哪一句 2>&1 将错误输出 重定向到标准输出 自己竟然一直没有理解到 & 其实是地址符号的意思.. 这一块是在是太low了. 当我们在shell中执行命令的时候,每个进程都和三个打开的文件

shell 中 标准输出和错误输出

命令 标准输出 标准错误 >/dev/null 2>&1 丢弃 丢弃 2>&1 >/dev/null 丢弃 屏幕 1>/dev/null 丢弃 屏幕 2>/dev/null 屏幕 丢弃      

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015 01:23:58 AM PST **********************************

标准输入、标准输出、标准错误

(1).标准输入为 代码为0(2).标准输出为 代码为1(3).标准错误为 代码为2 重定向标准输出> 将命令输出写入文件或设备. < 从文件而不是从键盘或句柄读入命令输入 >> 将命令输出添加到文件末尾而不删除文件中已有的信息 cat passwd | awk -F: '{print $1}' | sort    >sort.out 重定向标准输入cat >> alvin.log <<EOF> my name is alvin> my n

文件IO详解(四)---标准输入、标准输出和标准错误

每个进程都会默认打开3个文件描述符,即0.1.2.其中0代表标准输入流.1代表标准输出流.2代表标准错误流.通常标准输入流对应着键盘的设备文件.标准输出流和错误流对应着显示器的设备文件.在编程中通常使用宏STDIN_FILENO.STDOUT_FILENO和STDERR_FILENO分别来代表0,1,2. 要注意一点: 0.1.2这三个文件描述符对应的是标准输入流.标准输出流和标准错误流而不是键盘设备文件和显示器设备文件.只是默认标准输入流对应着键盘设备文件,标准输出和错误对应着显示器设备文件.

shell脚本中常见的标准输入、标准输出、标准错误重定向详解

  1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用. 用处: 禁止标准输出.    1 cat $filename >/dev/null   # 文件内容丢失,而不会输出到标准输出. 禁止标准错误.    2>/dev/null 这样错误信息[标准错误]就被丢到太平洋去了. 2.1>/dev/null 2>&

Linux shell标准输入,标准输出,错误输出

shell中可能经常能看到:1>/dev/null  2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件> 代表重定向到哪里,例如:echo "123" > /home/123.txt1 表示stdout标准输出,系统默认值是1

java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err

操作系统一般都有三个标准文件描述符:标准输入,标准输出,标准出错 这是操作系统的一种抽象表达 不同的语言需要有不同的具体表达方式,当然也不过是另一种包装抽象 比如c++的  cin cout cerr Java中则是的System.in,System.out,System.err 示例 输出结果: ---------------- ---------------- 可以看得出来: 运行多次  err的打印信息位置是不固定的 看下JDK文档:   /** * The "standard"