本文并非阐述文件描述符与文件句柄的异同,而是标准

这是怎样的标准呢?

fork创建一个进程,规定默认存在3个文件描述符,分别是

描述符编号

简介

作用

0

标准输入

通用于获取输入的文件描述符

1

标准输出

通用输出普通信息的文件描述符

2

标准错误

通用输出错误信息的文件描述符

标准输入比较好理解,在函数scanf中,就是从标准输入获取的数据。我们执行一个命令,只要此命令在前台执行,标准输入就是我们在终端的输入。

标准输出与标准错误用途是有差别的。从命名上我们就发现,标准错误用于输出错误信息,而标准输出更多只是输出提示信息。通过不同的文件描述符,把普通的提示信息和错误提示信息区分开,非常方便于过滤日志。

在默认情况下,标准输出和标准错误都指向同一个文件,如果在终端前台执行,那么不管是标准输出还是标准错误,都是输出到终端。

C语言对标准的运用

C中与这标准相关的宏有六个,

标准

stdio.h

unistd.h

标准输入

stdin

STDIN_FILENO

标准输出

stdout

STDOUT_FILENO

标准错误

stderr

STDERR_FILENO

stdin 和 STDIN_FILENO 都指向的是标准输入,前者是 FILE类型,就是我们所说文件句柄,而后者是int类型,就是我们所说的文件描述符。标准输出和标准错误也是一样的情况。

所以,在不同的C接口,我们需要用不同的宏。

fprintf(stdout, "stdout\n");

write(STDOUT_FILENO, "STDOUT_FILENO\n", 14);

前面有提到,标准输入、标准输出、标准错误是默认存在的,也就是说我们不需要open或者fopen,可以直接使用。例如

#include

int main(int argc, char **argv)

{

fprintf(stderr, "something error\n");

}

Shell对标准的运用

Shell命令经常用到的 重定向 实际上就是对标准的运用

标准

运用

示例

标准输入

<

cat < helloworld.c

标准输出

> 或者 1>

echo "helloworld" > stdout.log

标准错误

2>

grep "error" 2>/dev/null

C&Shell配合

#include

#include

#include

#include

int main(int argc, char **argv)

{

char input[100];

FILE *file;

fprintf(stdout, "stdout\n");

fprintf(stderr, "stderr\n");

write(STDOUT_FILENO, "STDOUT_FILENO\n", strlen("STDOUT_FILENO\n"));

write(STDERR_FILENO, "STDERR_FILENO\n", strlen("STDERR_FILENO\n"));

}

在Bash shell中直接执行,默认情况下,标准输出和标准错误都输出到终端

[GMPY@14:43 tmp]$./stdio

stdout

stderr

STDOUT_FILENO

STDERR_FILENO

通过Shell重定向的方法,区分开标准输出和标准错误的日志

[GMPY@14:43 tmp]$./stdio 2>stderr.log 1>stdout.log

[GMPY@14:47 tmp]$cat stderr.log

stderr

STDERR_FILENO

[GMPY@14:47 tmp]$cat stdout.log

STDOUT_FILENO

stdout

[GMPY@14:47 tmp]$

linux 标准输入句柄,标准文件描述符与标准文件句柄相关推荐

  1. Linux C:文件描述符、IO重定向、恢复标准输入输出

    目录 一.文件描述符 二.IO重定向 三.重定向回终端.伪终端 四.恢复标准输入输出 一.文件描述符 在Linux中,文件描述符是一个非负整数的数据类型.是FILE结构体中的一个成员属性. 每打开或者 ...

  2. Linux中的文件描述符与打开文件之间的关系

    1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是 ...

  3. Linux下的文件描述符

    引文 在 Linux 的世界里,一切设备皆文件.对文件的操作都是通过文件描述符(fd)来进行的. Linux 中有7种文件类型: 文件类型 文件类型描述 符号 普通文件 最常使用的一类文件,其特点是不 ...

  4. Linux文件,文件描述符以及dup()和dup2()

    一.Linux中文件 可以分为4种:普通文件.目录文件.链接文件和设备文件. 1.普通文件 是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据. ls -lh 来查 ...

  5. linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?

    我的工作,那将在Linux和Mac OS X上运行的服务器应用程序它是这样的:linux上的文件描述符3有什么特别之处? 启动主要应用 控制器进程的叉 调用lock_down()在控制过程中 再次叉终 ...

  6. Linux下利用文件描述符恢复的成功失败实验

    数据误删除是作为初级运维人员常常遇到的"低级错误",一些有经验的老手有时也在疲劳.不冷静的情况下"马失前蹄".一旦误删除数据文件,尽快采用影响最小.最迅速的手段 ...

  7. 加大Linux服务器的文件描述符

    系统启动时,每个进程都需要占用一到几个,默认是1024比较小,如果到了该数值后,进程就会启不来,所以我们在前期都会把它设置大一点 详细描述:对于内核而主,所有打开的文件都通过文件描述符引用.文件描述符 ...

  8. linux exec操作文件描述符

    linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2, ...

  9. Linux——什么是文件描述符

    目录 前文 一,为什么有文件描述符 二,什么是文件描述符 2.1 文件操作接口 2.2 文件描述符 三,文件描述符的原理 四,文件描述符的分配规则 前文 本文主要是详解一下文件描述符,我们从1.为什么 ...

最新文章

  1. 活动 | 人工智能产学研生态建设研讨会报名开启
  2. Git复习(九)之理解git工作区和暂存区
  3. java getmethod类_Java getMethod类型参数
  4. Java黑皮书课后题第2章:*2.21(金融应用:计算未来投资回报)编写程序,读取投资总额、年利率和年龄,显示未来投资回报金额
  5. 01python初识—编辑器版本变量知识
  6. 转SQLSERVER 会不会自动加锁
  7. KMP算法 AC自动机
  8. Python(二十):迭代器、生成器
  9. Access新手到高手视频教程 109讲
  10. css点击按钮改变样式
  11. url 转码 java_HttpClient请求URL字符集转码问题解决方法
  12. 计算机毕业设计JAVA共享充电宝系统mybatis+源码+调试部署+系统+数据库+lw
  13. 敏捷开发scrum学习笔记(更新中)
  14. 攻击 xxs_“吃鸡”玩家被xxs故意炸倒,举报时出现提示,光子站在xxs一边!
  15. 「我们只投这两种AI公司」, 三位局内人首次公开AI投资的技术与产业标准
  16. AD19画原理图和PCB注意事项和步骤(主要为PCB和总结注意事项)
  17. java代码安全检测机制,下列选项中,属于Java语言的代码安全检测机制的一项是______。A.动态链接B.访问权限的检查C.通过接...
  18. mapi java_使用 MAPI 实现邮件发送
  19. 什么是 Ubuntu?
  20. [Java]Error:No enclosing instance of type E is accessible. Must qualify the allocation with an enclo

热门文章

  1. 计算机基础- -操作系统环境
  2. JQuery属性、事件相关操作
  3. Vulkan Video实现GPU加速视频编码/解码
  4. Per-Title编码优化
  5. AI助力新药研发 腾讯发布「云深智药」平台
  6. 腾讯云入选云原生产业联盟首批理事单位 助力生态发展与产业落地
  7. 央视-腾讯发布报告:九成受访者认为AI 距离自己并不遥远
  8. 微信PaxosStore:深入浅出Paxos算法协议
  9. go语言json字符串解析为结构体数组,结构体指针的数组
  10. 多线程与高并发(六):线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等