Fd #include <stdio.h> Fd extern FILE *stdin; Fd extern FILE *stdout; Fd extern FILE *stderr;

DESCRIPTION 描述

通常,每个 Unix 程序在启动时都会打开三个流,一个用于输入,一个用于输出,一个用于打印诊断或错误消息。典型的,他们被连接到用户的终端 (参见 tty(4)) 但是也有可能指向文件或是其他设备,取决于父进程选择设置了什么 (参见 sh(1) 的重定向 (``Redirection'') 章节。)

输入流被称为 ``standard input''; 输出流被称为 ``standard output''; 错误流被称为 ``standard error''。这些名词通常简写为符号,用于引用这些文件,它们是 stdin stdoutstderr

这些符号中,每一个都是 stdio(3) 中的一个宏,类型是指向 FILE 的指针,可以用于类似 fprintf(3) 或 fread(3) 等函数中。

由于 FILE 是一个对 Unix 文件描述符加以缓冲的包装,下层的文件也可以使用原始的 Unix 文件接口来存取。也就是,类似 read(2) 和 lseek(2) 的函数。与流 stdin stdoutstderr 关联的整数形式的文件描述符分别是 0,1 还有 2。预处理器符号 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 分别以它们为值,定义在 <unistd.h> 中。

注意混合使用 FILE 和原始的文件描述符可能带来不可预料的结果,一般应当避免。(对于喜欢追根问底的人:POSIX.1 规范的 8.2.3 节详细地描述了这样的混合使用怎样才能不出错。) 一个简单的规则是,文件描述符由内核控制,而 stdio 仅仅是一个库。它的意思是,例如当调用 exec 之后,子进程可以继承所有打开的文件描述符,但是任何原有的流都不可再存取了。

由于符号 stdin stdoutstderr 被指定为宏,为它们赋值将导致不可移植。利用库函数 freopen(3) ,标准流可以用来指向不同的文件。引进这个函数专门用来为 stdin stdoutstderr 重新赋值。标准流在调用 exit(3) 和程序正常中止时被关闭。

最新文章

  1. 使用js-xlsx库,前端读取Excel报表文件
  2. NOIP201103瑞士轮【B002】
  3. 个人练习--gif图流程
  4. FireFox背景亮度修改
  5. c#部分---递归题目;猴子摘桃
  6. .net-.net试题2
  7. MyBatis 通过包含的jdbcType类型和java中对应的数据类型
  8. 深究带PLL的错误复位设计
  9. pthread_once()使用(某个时间在整个程序中仅执行一次,不确定是那个线程)
  10. Vue指令总结---小白同学必看
  11. Java模版方法的另一种实现
  12. AtomicInteger和count++的比较
  13. hdu3183 rmq求区间最值的下标
  14. iOS UI基础-11.0 UINavigationController
  15. java park unpark
  16. 百度知道里关于C++的讨论
  17. spring 注解 @NotBlank and BingResult
  18. nginx如何配置虚拟主机
  19. [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)
  20. 六 web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

热门文章

  1. iview 分割面板效果(二)
  2. Springboot1.5.9整合WebSocket
  3. go语言从例子开始之Example28.非阻塞通道操作
  4. 强大的性能监控pidstat
  5. webpack学习(一)起步安装
  6. .net 开源项目地址
  7. 手写实现indexOf
  8. Jetson Nano 系列教程2:串口调试接口登录Jetson Nano
  9. What size do you use for varchar(MAX) in your parameter declaration?
  10. 网页打开qq