本文不是阐述文件描述符与文件句柄的异同,而是标准的
这是什么标准?
fork创建一个进程,该进程默认情况下规定存在三个文件描述符
描述符编号
个人资料
作用
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接口上,需要使用不同的宏。
frintf(stdout、' stdoutn ' );
write(stdout_fileno,' STDOUT_FILENOn ',14 );
如上所述,默认情况下存在标准输入、标准输出和标准错误。 也就是说,不需要open或fopen,可以直接使用。 例如
#包含
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
frintf(stderr,' something errorn ';
}
壳在标准中的运用
shell命令中常用的重定向实际上是标准操作
标准
运用
样品
标准输入
cat helloworld.c
标准输出
或1
echo 'helloworld' stdout.log
标准错误
2
组错误2/dev/null
壳牌合作
#包含
#包含
#包含
#包含
(intmain(intargc,char **argv ) ) ) ) ) ) ) )。
{
char input[100];
文件*文件;
frintf(stdout、' stdoutn ' );
frintf(stderr、' stderrn ' );
write(stdout_fileno,' STDOUT_FILENOn ',strlen ) );
write(stderr_fileno,' STDERR_FILENOn ',strlen ) ) STDERR_FILENOn ';
}
直接在bash shell上运行,默认情况下,标准输出和标准错误都将输出到终端
[GMPY@14:43 tmp]$./stdio
stdout
stderr
STDOUT_FILENO
STDERR_FILENO
用shell重定向的方法区分标准输出和标准错误日志
[ gmpy @ 14:43 tmp ] $./stdio2stderr.log1stdout.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]$