当我们使用文件描述符进行操作时,需要操作标准输入、标准输出、标准错误,可以包含如下头文件:

#include <unistd.h>

这个头文件中定义了标准设备:

/* Standard file descriptors.  */
#define STDIN_FILENO    0   /* Standard input.  */
#define STDOUT_FILENO   1   /* Standard output.  */
#define STDERR_FILENO   2   /* Standard error output.  */

任意一个进程在启动时都会初始化对应的标准设备,他们对应的文件描述符就是0,1,2。
标准输出可以使用重定向符号>进行重定向,标准错误也可以重定向到标准输出中。

ls > log.txt 2>&1

示例:

 #include <stdio.h>#include <unistd.h>int main(int argc, char *argv[]){char buf[10];int n;while((n = read(STDIN_FILENO, buf, 10)) > 0) {if (write(STDOUT_FILENO, buf, n) != n) {perror("Write Failed");exit(1);}}if (n < 0) {perror("Read Failed");exit(2);}return 0;}

标准IO库中的文件操作,涉及到FILE文件流格式的标准输入,标准输出和标准错误:

#include <stdio.h>

这个头文件定义了如下的标准设备:

typedef struct _IO_FILE FILE;/* Standard streams.  */
extern struct _IO_FILE *stdin;      /* Standard input stream.  */
extern struct _IO_FILE *stdout;     /* Standard output stream.  */
extern struct _IO_FILE *stderr;     /* Standard error output stream.  */

因此只要包含了该文件,我们可以直接使用stdin、stdout,stderr来使用。
示例:

#include <stdio.h>int main(int argc, char *argv[])
{char buf[10];int n;while((n = fread(buf, 1, 10, stdin)) > 0) {printf("fread return n:%d\n", n);if (fwrite(buf, 1, n, stdout) != n) {perror("fwrite failed");exit(1);}}if (n < 0) {perror("fread failed");exit(2);}return 0;
}

我们需要清楚的一点就是,使用标准IO库的读写操作,内部实现是包含缓冲区的,所以这里我们读10个字节,如果仅仅输入8个是不会写入到标准输出的,只有当达到10个字节才会写入。

$ ./iostream
123456789
fread return n:10
123456789
123456
789
fread return n:10
123456
789

标准输入,标准输出和标准错误相关推荐

  1. 【Linux】21.Linux输入输出重定向、2>1、标准输入、标准输出、标准错误

    输入输出重定向.2>&1.标准输入.标准输出.标准错误 https://zhuanlan.zhihu.com/p/47765176 ./test.sh > log.txt 2> ...

  2. dup、dup2实现文件描述符重定向(标准输入、标准输出、标准错误输出)

    目录 dup函数 dup2函数 重定向标准输入 重定向标准输出 重定向标准错误输出 重定向恢复 总结 在前文中,可以知道,文件描述符实际上是指向文件表项的指针数组索引,也就相当于每个文件描述符都对应一 ...

  3. Linux的标准输入、标准输出和标准错误

    Linux的标准输入.标准输出和标准错误 什么是文件描述符? 文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket. 最前面的三个文件描述符(0,1,2)分别与标准输入(std ...

  4. Bash中的标准输入、标准输出和标准错误输出

    原理 每个程序在运行后,都会至少打开三个文件描述符,分别是0:标准输入:1:标准输出:2:标准错误. 例如,对于test.sh脚本,我们通过下面的步骤看到它至少打开了三个文件描述符: ./test.s ...

  5. 默认标准错误文件linux,Linux中标准输出和标准错误的重导向

    若是一个命令须要长时间在服务器上运行,那么不少时候会用到nohup命令,这时即使远程登陆ssh中断了与服务器的联系,那么在服务器上运行的命令也不会所以而被迫中止.shell 一般状况下,nohup与& ...

  6. 文件IO---标准输入、标准输出和标准错误

    文件IO---标准输入.标准输出和标准错误 (1) 每个进程都会默认打开3个文件描述符,即0.1.2.其中0代表标准输入流.1代表标准输出流.2代表标准错误流.通常标准输入流对应着键盘的设备文件.标准 ...

  7. linux 的错误输出黑洞,Linux的标准输出、标准错误输出、nohup

    1.在bash中标准输出可以用1来表示:通常来说这个1可以省略: 如./xxx >/dev/null 和 ./xxx 1>/dev/null 是一个意思 2.在bash中标准错误输出可以用 ...

  8. 标准输出和标准错误输出

    相关概念 默认情况下,总是有三个文件处于打开状态 1. 标准输入(键盘输入) 对应文件描述符0 2. 标准输出(输出到屏幕) 对应文件描述符1 3. 标准错误(也是输出到屏幕) 对应文件描述符2 常用 ...

  9. 标准输出和标准错误重定向

    程序:指令+数据 读入数据:Input 输出数据:Output 在linux中一条指令或者程序,可以分为三种形式: 标准输入:-0 默认接受来自键盘的输入 标准输出:-1 默认输出到终端窗口 标准错误 ...

最新文章

  1. 一步一步教您打印出自己大脑的3D模型
  2. _Linux系统编程—信号集操作函数
  3. 简易调用及实例化视图
  4. Java接口long类型精度丢失,解决前后端交互Long类型精度丢失问题
  5. AMUL的完整形式是什么?
  6. dbcp连接池配置参数
  7. 软测基础相关知识回顾
  8. 深入理解同步/异步与阻塞/非阻塞区别 (转)
  9. 计算机桌面黑屏时间,您必须等待至少一分钟,计算机才能将屏幕保护程序设置为使计算机黑屏...
  10. CAM350 使用,典型做钢网
  11. 和利时dcs系统服务器设置,和利时DCS系统常见问题分析
  12. excel 取消合并单元格
  13. 达梦8初始化参数之BLANK_PAD_MODE
  14. Excel 表格图片压缩方法
  15. MIC的常见问题分析
  16. 利用Fiddler抓包解析,轻松下载m3u8格式网络视频
  17. 英美团队发现神秘信号:金星上可能存在生命?
  18. 用友GRP-u8 XXE 漏洞复现
  19. 【接口篇 / Wan】(6.4) ❀ 01. 拨号宽带经过防火墙后的速度变化 ❀ FortiGate 防火墙
  20. 我的第一个小程序【深车摇知】成功上线啦

热门文章

  1. AI英雄们,我们邀你向病理诊断和智能投顾发起挑战!| 人工智能创新创业大赛...
  2. 弘辽科技:淘宝代购小白怎么做?代购新手教程
  3. 血液与病毒:新冠病毒感染概率与血型有关吗?
  4. 检测域名是否已被微信封掉不能访问
  5. MySQL-03-索引
  6. 证券的交易价格相对于上一个交易日收盘价格的涨跌幅度不得超过10%
  7. java面试中经常会被问到分布式面试题
  8. ztree配置async异步加载子节点,展开不触发请求的问题解决记录
  9. github搜索技巧
  10. 弘辽科技:拼多多什么时候有活动?参加活动有哪些好处?