欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

linux 标准输入句柄,标准文件描述符与标准文件句柄

发布时间:2024/2/28 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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]$

超强干货来袭 云风专访:近40年码龄,通宵达旦的技术人生

总结

以上是生活随笔为你收集整理的linux 标准输入句柄,标准文件描述符与标准文件句柄的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。