5. 高级 I/O 函数

文件描述符

文件描述符(File Descriptor, FD)是操作系统中用于访问文件的一个抽象概念。它是一个非负整数,通常由操作系统分配,用来标识被打开的文件或输入输出资源(如管道、网络连接等)。文件描述符在操作系统和应用程序之间充当桥梁,允许程序通过文件描述符来读取、写入文件或进行其他I/O操作。

文件描述符的类型

文件描述符通常分为三类标准描述符:

  1. 标准输入(Standard Input,FD 0)
  • 默认情况下与键盘关联,通常用于从用户那里接收输入数据。
  1. 标准输出(Standard Output,FD 1)
  • 默认情况下与终端窗口关联,通常用于向用户显示输出数据。
  1. 标准错误(Standard Error,FD 2)
  • 默认情况下也与终端窗口关联,但通常用于显示错误消息或诊断信息。

文件描述符的使用

在UNIX和类UNIX操作系统中,文件描述符用于各种I/O操作,包括:

  • 打开文件open() 系统调用返回一个文件描述符,表示已打开的文件。
  • 读取文件read() 系统调用使用文件描述符从文件中读取数据。
  • 写入文件write() 系统调用使用文件描述符将数据写入文件。
  • 关闭文件close() 系统调用使用文件描述符关闭文件,以释放系统资源。

文件描述符不仅限于文件,还可以用于网络套接字(socket)、管道(pipe)、设备文件等各种输入输出资源。通过文件描述符,程序可以对这些资源进行抽象的统一操作。

socket 和文件描述符的关系

socket 和文件描述符之间有着密切的关系,特别是在 UNIX 和类 UNIX 操作系统中。简而言之,socket 是一种特殊类型的文件描述符,它用于网络通信。

Socket 与文件描述符的关系

  1. Socket 是文件描述符的一种
  • 在操作系统中,socket 被抽象为文件,这意味着每个 socket 都可以通过文件描述符进行标识和操作。文件描述符不仅用于文件,还可以用于其他 I/O 资源,如 socket、管道、设备文件等。
  1. Socket 的创建与文件描述符
  • 当你使用 socket() 系统调用创建一个 socket 时,操作系统会返回一个文件描述符,这个文件描述符代表了创建的 socket。例如:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

这里,sockfd 就是一个文件描述符,后续的所有 socket 操作(如连接、发送、接收等)都将通过该文件描述符来进行。

  1. Socket 的操作类似于文件操作
  • 和普通文件一样,socket 的读写操作也是通过 read()write() 甚至是 send()recv() 等系统调用来完成的。你可以使用这些调用函数来向 socket 发送或接收数据。例如:
char buffer[1024];
int n = read(sockfd, buffer, sizeof(buffer));

在这个例子中,read() 函数通过 sockfd 文件描述符从 so

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

红茶川

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

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

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

打赏作者

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

抵扣说明:

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

余额充值