在Linux世界里,socket也被认为是文件的一种,因此在网络数据传输过程中自然可以使用文件I/O的相关函数。
文件描述符:
0:标准输入
1:标准输出
2:标准错误
文件和套接字一般经过创建才会被分配文件描述符,而上述3种输入输出对象即使未经特殊的创建过程,程序开始运行后也会被自动分配文件描述符。
文件描述符只不过是为了方便称呼操作系统创建的文件或套接字赋予的数而已。
打开文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char* path, int flag);//成功时返回文件描述符,失败返回-1
//path:文件名的字符串地址
//flag: 文件打开模式信息
打开模式:
O_CREAT : 必要时创建文件
O_TRUNC : 删除全部现有数据
O_APPEND : 维持现有数据,保存到其后面
O_RDONLY : 只读打开
O_WRONLY : 只写打开
O_RDWR : 读写打开
关闭文件:
#include <unistd.h>
int close(int fd);//成功返回0,失败返回-1
//fd:需要关闭的文件或套接字的文件描述符
将数据写入文件:
#include<unistd.h>
ssize_t write(int fd , const void* buf , size_t nbytes);//成功时返回写入的字节数,失败返回-1
fd:显示数据传输对象的文件描述符
buf:保存要传输数据的缓冲地址值
nbytes:要传输数据的字节数
读取文件中的数据:
#include<unistd.h>
ssize_t read(int fd , void* buf , size_t nbytes);//成功时返回接收的字节数(但遇到文件结尾则返回0),失败返回-1
fd:显示数据接收对象的文件描述符
buf:要保存接收数据的缓冲地址值
nbytes:要接收数据的最大字节数