Linux-std*文件介绍

std*

介绍

在 Linux 中,每个进程都有三个默认的 I/O 流,分别是标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。这三个流都通过文件描述符来引用,文件描述符是一个非负整数,用于标识打开的文件或其他 I/O 流。

下面是有关每个文件描述符的详细信息:

  • 标准输入(stdin):它的文件描述符是 0。在默认情况下,它从终端读取输入。可以使用 read 命令从 stdin 读取输入,例如:read variable_name
  • 标准输出(stdout):它的文件描述符是 1。在默认情况下,它向终端输出。可以使用 echo 命令向 stdout 输出内容,例如:echo "Hello, World!"
  • 标准错误输出(stderr):它的文件描述符是 2。在默认情况下,它也向终端输出。可以使用 echo 命令向 stderr 输出内容,例如:echo "Error: file not found" >&2

文件描述符还可以用于引用其他打开的文件或管道。例如,如果你想将命令的输出重定向到文件中,可以使用文件描述符 1 来引用文件。例如,下面的命令将 ls 命令的输出重定向到名为 filelist.txt 的文件中:

ls > filelist.txt

在这个命令中,> 符号将文件描述符 1(即标准输出)重定向到名为 filelist.txt 的文件中。

总之,标准输入、标准输出和标准错误输出是 Linux 中非常重要的概念,文件描述符是引用它们的机制。理解它们的概念和如何使用它们将有助于你更好地理解和掌握 Linux 命令行。

实例

[root@localhost dev]# ls -al std*
lrwxrwxrwx. 1 root root 15 3月  23 10:39 stderr -> /proc/self/fd/2		#软连接	
lrwxrwxrwx. 1 root root 15 3月  23 10:39 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 3月  23 10:39 stdout -> /proc/self/fd/1
[root@localhost dev]# ls /proc/self/fd/2							
/proc/self/fd/2
[root@localhost dev]# ls -al /proc/self/fd/2
lrwx------. 1 root root 64 3月  27 10:29 /proc/self/fd/2 -> /dev/pts/1	#软连接
[root@localhost dev]# ls -al /dev/pts/1
crw--w----. 1 root tty 136, 1 3月  27 10:29 /dev/pts/1
[root@localhost dev]# hello
  • 标准输入 --》fd0

  • 标准输出 --》fd1

  • 标准错误输出 --》fd2

文件描述符

文件描述符是 Linux 中一个非常重要的概念,它允许进程通过标准输入、标准输出和标准错误输出进行输入和输出操作,或者通过其他文件或管道进行交互。

在 Linux 中,文件描述符是一种非负整数,用于标识打开的文件或其他 I/O 流。每个打开的文件都有一个与之关联的文件描述符,可以使用该文件描述符来读取或写入该文件。

Linux 中的文件描述符是按照顺序分配的,每个进程都有三个默认的文件描述符:标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。它们分别由文件描述符 0、1 和 2 引用。例如,你可以使用 ls > file.txt 命令将 ls 命令的输出写入名为 file.txt 的文件中,这里的 > 表示将标准输出重定向到文件中。

除了这三个默认的文件描述符,Linux 中还有其他预定义的文件描述符,例如,文件描述符 3 到 9 是保留的,通常用于特定的目的,如在 shell 脚本中与文件或管道进行交互。文件描述符 10 及以上是未经预定义的,可以自由使用。

在 Linux 中,可以使用以下命令来重定向文件描述符:

  • >:用于将标准输出重定向到文件中。
  • >>:用于将标准输出追加到文件中。
  • <:用于从文件中读取输入并将其发送到标准输入流中。
  • 2>:用于将标准错误输出重定向到文件中。
  • 2>>:用于将标准错误输出追加到文件中。

除了上述命令外,还可以使用 exec 命令来重定向文件描述符。例如,exec 3< file.txt 命令将文件描述符 3 指向名为 file.txt 的文件。现在,你可以使用 read 命令从文件描述符 3 中读取输入,例如,read line <&3 命令将从文件描述符 3 中读取一行输入。

[root@localhost 4-10]# exec 3< test.txt 
[root@localhost 4-10]# read line <&3
[root@localhost 4-10]# echo $line 
yandonghao 22 男

此外,还有一些其他的文件描述符操作,如 dupdup2 函数。dup 函数可以复制一个文件描述符,并返回一个新的文件描述符,它指向与原始文件描述符相同的文件或管道。dup2 函数与 dup 函数类似,但它允许你将一个已经打开的文件描述符复制到另一个文件描述符上。

Linux 中的文件描述符是在进程中的每个打开文件的文件表中进行分配和管理的。当进程打开一个文件时,内核为该文件分配一个文件表项,并返回一个文件描述符给进程。进程可以使用这个文件描述符来执行读取、写入、关闭等操作。

当进程启动时,它会自动打开三个文件描述符:标准输入、标准输出和标准错误输出。这些文件描述符分别连接到终端设备或其他的输入/输出设备。

在 Linux 中,文件描述符是通过一组系统调用来管理的,包括 open()、close()、read()、write()、fcntl() 等。进程可以使用这些系统调用来打开、关闭、读取、写入和修改文件描述符。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈密猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值