玩linux的时候经常会看到stdin,stdout和stderr,这3个可以称为终端(Terminal)的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。

通过man stdin查看手册,可以看到它们都是在stdio.h中定义的。 当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作。下面用c语言模拟下这3个文件流。

标准输入(standard input)

在c语言中表现为调用scanf函数接受用户输入内容,即从终端设备输入内容。也可以用fscanf指明stdin接收内容。 标准输入的文件标识符为0。

#include

int main(void)

{

char str[10];

scanf("%s", str);

fscanf(stdin, "%s", str);

return 0;

}

标准输出(standard out)

在c语言中表现为调用printf函数将内容输出到终端上。使用fprintf也可以把内容输出到终端上。标准输出的文件标识符为1。

#include

int main(void)

{

printf("%s\n", "hello");

fprintf(stdout, "%s\n", "hello");

return 0;

}

标准错误输出(standard error)

标准错误和标准输出一样都是输出到终端上, 标准错误输出的文件标识符为2。笔者更倾向于从语义上分析:在程序处理的时候,正常的信息输出作为标准输出,产生错误的输出作为标准错误输出。这样在重定向的时候,就可以将正常的信息和错误的信息重定向到不同的文件。

#include

int main(void)

{

printf("%s\n", "hello");

fprintf(stderr, "%s\n", "error");

return 0;

}

上面这个程序分别往终端和stderr输出了信息,编译这个程序生成二进制文件a.out,使用下列命令运行,重定向输出。

./a.out 1>log.txt 2>error.txt

这样就把输出的内容hello保存到了log.txt文件,错误的信息error保存到了error.txt文件。

在c语言里,也可以使用freopen函数重定向输出流。

#include

int main(void)

{

FILE *out = freopen("out.txt", "w", stdout);

printf("%s\n", "hello");

return 0;

}

上例代码编译执行后,终端上并没输出内容,而是保存到了out.txt这个文件了。

总结

总的来说,stdin,stdout和stderr还是和终端有密切关系,通常在生产环境时,会将这3个流重定向到其它文件。比如编写守护进程的时候,因为守护进程和终端无关,所以往往会将stdin,stdout和stderr重定向到/dev/null去。

linux 进程 stdout,linux下的stdin,stdout和stderr理解和程序实例分析相关推荐

  1. linux 读取终端stdout,【Linux基础】linux下的stdin,stdout和stderr理解

    在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据流,也就是题目中所提到的这三个. 1.三个数据流默认是表现在用户终端上的 执行一个shell命令行时通常会自动打开三个标准文件 ...

  2. Linux Shell 文件描述符 及 stdin stdout stderr 重定向

    Abstract: 1) Linux Shell 命令的标准输入.标准输出.标准错误,及其重定位: 2)Linux Shell 操作自定义文件描述符: 文件描述符是与文件相关联的一些整数,他们保持与已 ...

  3. 查看linux进程超时,Linux,在子进程上超时(Linux, timing out on subprocess)

    Linux,在子进程上超时(Linux, timing out on subprocess) 好吧,我需要编写一个调用脚本的代码,如果脚本中的操作挂起,则终止该过程. 首选语言是Python,但我也在 ...

  4. Linux 进程资源分配,linux 进程管理和内存分配

    1.进程相关概念 进程:正在运行中的程序 内核功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能等 Process:运行中的程序的一个副本,是被载入内存的一个指令集合 进程 ID(Pro ...

  5. linux进程属性,Linux进程属性及含义

    一个进程包含多个属性参数,通过使用 ps 命令,我们可以查看当前系统中有关进程的详细信息,例如: [root@localhost ~]# ps -le F S UID PID PPID C PRI N ...

  6. 【Linux进程】Linux进程

    Linux进程 Linux进程介绍 程序和进程 进程并发 CPU和MMU PCB 环境变量 Linux进程控制 创建子进程(fork函数) 子进程切换执行的代码(exec函数族) 回收子进程(wait ...

  7. linux 进程数据结构,Linux进程数据结构详解

    1.Linux的进程简介: 支持多线程的操作系统中,进程是资源分配的最小单位,线程是调度的基本单位.Linux是现代的32位或64位的支持多线程的操作系统,不过Linux是一种以轻量级进程作为线程,多 ...

  8. linux 进程 系统调用,linux进程与系统调用

    进程管理 linux系统的实现非常特别:他对线程和进程并不特别区分.对linux而言,线程只不过是一种特殊的进程罢了. 现代操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存.虽然实际上可能是许多 ...

  9. linux进程笔记,Linux自学笔记——linux进程及作业管理

    内核的功用主要有进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能这几个方面,本文主要讨论linux进程及作业管理. 进程管理: 进程,process,运行中程序的一个副本,且存在生命周期: ...

最新文章

  1. matlab中的timer模块,[转载]Matlab中Timer的使用
  2. mysql查询日期内的所有日期代码
  3. linux 配置DNS正反区域,Linux基础服务_DNS原理以及正反向DNS配置
  4. PLSQL_性能优化系列20_Oracle Result Cash结果缓存
  5. chrome怎么隐藏浏览器_如何使用Google Chrome的隐藏阅读器模式
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的后台医疗管理系统
  7. 谈谈工业通信协议的采集和转换-如modbus opc profinet ethernetIP 61850等
  8. Axure原型图教程
  9. 央行数字货币:第三方支付产业新变量
  10. Java对接支付宝的支付、退款、提现
  11. 哪些深度相机有python接口_三种主流深度相机介绍
  12. 数据库维护任务-邮件通知:未配置全局配置文件。请在 @profile_name 参数中指定配置文件名。
  13. 第五届新疆省ACM-ICPC程序设计竞赛(重现赛)
  14. 设定是否使用IOB中的寄存器
  15. ELK高级搜索四之Mapping映射和分词器
  16. python包发布到Pypi官网
  17. 熬夜爆肝!C++基础入门大合集【万字干货预警 建议收藏】
  18. 2021-07-17 以太网-网络电缆被拔出解决方法
  19. C语言模拟密码输入(显示星号)
  20. VIM 常用操作(转载)

热门文章

  1. Spark(Locality)
  2. 小米8手机上PDF文件转Word如何转换?
  3. 餐饮行业未来的发展趋势和前景
  4. 伪元素在父元素中居中_魔法中的元素属性知识
  5. html字符串转json
  6. GPU+windows 10+vs2013+cuda7.5环境下配置caffe框架
  7. 计算机专业的会网盘扩容吗,网盘扩容是什么原理?百度云最新扩容技术解析!...
  8. 微信的匿名发消息怎么发
  9. 这一次数据说了算,『访问者模式』
  10. 平板android怎么升级版本,[原创]最简单的方式为华硕平板电脑EeePad TF101升级Android 3.1教程...