文件描述符标志是什么

文件描述符标志是什么,第1张

文件描述符内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非 Unix 内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。POSIX 定义了 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来代替 0、1、2。这三个符号常量的定义位于头文件 unistd.h。文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int 的大小,以及系统管理员设定的限制。Linux 2.4.22 强制规定最多不能超过 1,048,576 。

输出/输入重导向

> >> < << :> &> 2&> 2<>>& >&2

文件描述符(File Descriptor),用一个数字(通常为0-9)来表示一个文件。

常用的文件描述符如下:

文件描述符 名称 常用缩写 默认值

0 标准输入 stdin键盘

1 标准输出 stdout 屏幕

2标准错误输出 stderr 屏幕

我们在简单地用<或>时,相当于使用 0<或 1>(下面会详细介绍)。

* cmd >file

把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止复盖原有文件。

* cmd >>file

把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件後面。

* cmd <file

使cmd命令从file读入

* cmd <<text

从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考後面的例子。

* cmd <<<word

把word(而不是文件word)和後面的换行作为输入提供给cmd。

* cmd <>file

以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。

* cmd >| file

功能同>,但即便在设置了noclobber时也会复盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。

: >filename 把文件"filename"截断为0长度.# 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).

cmd >&n把输出送到文件描述符n

cmd m>&n 把输出 到文件符m的信息重定向到文件描述符n

cmd >&-关闭标准输出

cmd <&n 输入来自文件描述符n

cmd m<&n m来自文件描述各个n

cmd <&-关闭标准输入

cmd <&n-移动输入文件描述符n而非复制它。(需要解释)

cmd >&n-移动输出文件描述符 n而非复制它。(需要解释)

注意: >&实际上复制了文件描述符,这使得cmd >file 2>&1与cmd 2>&1 >file的效果不一样。更多Linux知识可参考《Linux就该这么学》。

这个FD就是File

Discriptor

中文翻译为文件描述符

Socket起源于unix,Unix中把所有的资源都看作是文件,包括设备,比如网卡、打印机等等,所以,针对Socket通信,我们在使用网卡,网卡又处理N多链接,每个链接都需要一个对应的描述,也就是惟一的ID,即对应的文件描述符。简单点说也就是

int

fd

=

socket(AF_INET,SOCK_STREAM,

0)

函数socket()返回的就是这个描述符。在传输中我们都要使用这个惟一的ID来确定要往哪个链接上传输数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11782425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存