文件描述符

所有对设备和文件的操作都使用文件描述符进行。

文件描述符是内核为了高效管理已被打开的文件所创建的索引值,即利用文件描述符来访问文件,值为非负整数,通常为小整数,用于指代被打开的文件。

当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。通常情况下,一个进程启动时,都会打开三个文件,即标准输入、标准输出、标准错误。标准输入的文件描述符是0,标准输出是1,标准错误是2。所以若此时我们再打开或创建一个新文件时,返回的描述符就是3。(POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话)

每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。具体情况要具体分析,要理解具体其概况如何,需要查看由内核维护的3个数据结构。

1.进程级的文件描述符表;

2.系统级的打开文件描述符表;

3.文件系统的i-node表。

 

与文件描述符相关的一些操作如下:

文件描述符的生成

open(), open64(), creat(), creat64()

socket()

socketpair()

pipe()

与单一文件描述符相关的操作

read(), write()

recv(), send()

recvmsg(),sendmsg()

sendfile()

lseek(), lseek64()

fstat(), fstat64()

fchmod()

fchown()

与复数文件描述符相关的操作

select(), pselect()

poll()

与文件描述符表相关的操作

close()

dup()

dup2()

fcntl (F_DUPFD)

fcntl (F_GETFD and F_SETFD)

改变进程状态的操作

fchdir()

mmap()

与文件加锁的操作

flock()

fcntl (F_GETLK, F_SETLK and F_SETLKW)

lockf()

与套接字相关的操作

connect()

bind()

listen()

accept()

getsockname()

getpeername()

getsockopt(), setsockopt()

shutdown()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值