socket与文件描述符

本文深入探讨了Linux编程中使用文件描述符进行文件和网络操作的过程,重点介绍了如何通过open函数处理普通文件,以及socket函数初始化网络连接。阐述了Linux文件系统结构与socket绑定的一致性,以及不同初始化函数对于不同类型I/O操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Linux编程时,无论是在操作文件还是网络操作时都能够通过文件描述符来read或者write。


Linux这一套文件机制就相当于面向对象里面的多态,拿到一个文件描述符都可以进行read或者write。但是具体的read和write却跟对应文件描述符的具体实现不同。比如socket的就是走网络,常用skfd表示文件描述符,普通文件的就是走磁盘IO,常用fd表示文件描述符。

下面一张UML类图大概表现出了Linux文件描述符的大概意思:

当然,为了将不同的类型的I/O与对应的文件描述符绑定,则是需要不同的初始化函数的。在C++中有构造函数跟编译器帮助搞定,在C函数里只能自己动手丰衣足食了。
普通文件就通过open函数,指定对应的文件路径,操作系统通过路径能够找到对应的文件系统类型,如ext4啊,fat啊等等。
如果是网络呢,就通过socket函数来初始化,socket函数就通过(domain, type, protocol)来找到对应的网络协议栈,比如TCP/IP,UNIX等等。

整个Linux 文件系统的结构差不多就这个意思,socket跟他绑定也是为了统一接口。
所以网络相关的调用,如connect, bind等等,第一步基本上就是通过文件描述符找到对应的内核socket结构,然后在进行对应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值