linux 标准输入句柄,标准文件描述符与标准文件句柄
本文并非阐述文件描述符与文件句柄的异同,而是标准
这是怎样的标准呢?
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 标准输入句柄,标准文件描述符与标准文件句柄相关推荐
- Linux C:文件描述符、IO重定向、恢复标准输入输出
目录 一.文件描述符 二.IO重定向 三.重定向回终端.伪终端 四.恢复标准输入输出 一.文件描述符 在Linux中,文件描述符是一个非负整数的数据类型.是FILE结构体中的一个成员属性. 每打开或者 ...
- Linux中的文件描述符与打开文件之间的关系
1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是 ...
- Linux下的文件描述符
引文 在 Linux 的世界里,一切设备皆文件.对文件的操作都是通过文件描述符(fd)来进行的. Linux 中有7种文件类型: 文件类型 文件类型描述 符号 普通文件 最常使用的一类文件,其特点是不 ...
- Linux文件,文件描述符以及dup()和dup2()
一.Linux中文件 可以分为4种:普通文件.目录文件.链接文件和设备文件. 1.普通文件 是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据. ls -lh 来查 ...
- linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
我的工作,那将在Linux和Mac OS X上运行的服务器应用程序它是这样的:linux上的文件描述符3有什么特别之处? 启动主要应用 控制器进程的叉 调用lock_down()在控制过程中 再次叉终 ...
- Linux下利用文件描述符恢复的成功失败实验
数据误删除是作为初级运维人员常常遇到的"低级错误",一些有经验的老手有时也在疲劳.不冷静的情况下"马失前蹄".一旦误删除数据文件,尽快采用影响最小.最迅速的手段 ...
- 加大Linux服务器的文件描述符
系统启动时,每个进程都需要占用一到几个,默认是1024比较小,如果到了该数值后,进程就会启不来,所以我们在前期都会把它设置大一点 详细描述:对于内核而主,所有打开的文件都通过文件描述符引用.文件描述符 ...
- linux exec操作文件描述符
linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2, ...
- Linux——什么是文件描述符
目录 前文 一,为什么有文件描述符 二,什么是文件描述符 2.1 文件操作接口 2.2 文件描述符 三,文件描述符的原理 四,文件描述符的分配规则 前文 本文主要是详解一下文件描述符,我们从1.为什么 ...
最新文章
- 活动 | 人工智能产学研生态建设研讨会报名开启
- Git复习(九)之理解git工作区和暂存区
- java getmethod类_Java getMethod类型参数
- Java黑皮书课后题第2章:*2.21(金融应用:计算未来投资回报)编写程序,读取投资总额、年利率和年龄,显示未来投资回报金额
- 01python初识—编辑器版本变量知识
- 转SQLSERVER 会不会自动加锁
- KMP算法 AC自动机
- Python(二十):迭代器、生成器
- Access新手到高手视频教程 109讲
- css点击按钮改变样式
- url 转码 java_HttpClient请求URL字符集转码问题解决方法
- 计算机毕业设计JAVA共享充电宝系统mybatis+源码+调试部署+系统+数据库+lw
- 敏捷开发scrum学习笔记(更新中)
- 攻击 xxs_“吃鸡”玩家被xxs故意炸倒,举报时出现提示,光子站在xxs一边!
- 「我们只投这两种AI公司」, 三位局内人首次公开AI投资的技术与产业标准
- AD19画原理图和PCB注意事项和步骤(主要为PCB和总结注意事项)
- java代码安全检测机制,下列选项中,属于Java语言的代码安全检测机制的一项是______。A.动态链接B.访问权限的检查C.通过接...
- mapi java_使用 MAPI 实现邮件发送
- 什么是 Ubuntu?
- [Java]Error:No enclosing instance of type E is accessible. Must qualify the allocation with an enclo