【Linux】基础IO接口

本文深入探讨了C语言和Linux环境下输入输出操作的基础知识,包括标准库IO接口、文件流指针、文件权限掩码、系统调用IO接口等关键概念。详细解析了fopen、fwrite、fseek、fread等函数的使用方法,以及open、read、write、lseek等系统调用的参数和返回值,为理解IO操作提供了全面的指导。

基础IO:

常用头文件 < fcntl.h>
标准库IO接口
c 默认会打开三个输入输出流, 分别是 stdin , stdout, stderr
这三个流的类型都是FILE*, fopen返回值类型,是个文件指针。

FILE* fopen(const char* path, const char* mode);
//path:文件路径名
//mode:
// r   只读      r+ 可读可写
// w   只写文件不存在则创建,若文件存在则清空原有内容
// w+  多出了可读操作
// a   追加打开,若文件不存在则创建,每次总是写到文件末尾
// a+  多出了可读指针
// 返回值: 文件的操作句柄  ----- 文件流指针

size_t fwrite(void* ptr, size_t size, size_t nmemb, FILE* stream);
//ptr:  要写入的数据           //size: 要写入的块大小
//nmemb: 块数                 // stream: 文件流指针
//返回值写入成功的块个数


int fseek(FILE* stream, long offset, int whence);
// 对stream文件的读写位置跳转到whence位置偏移offset个字节
// whence:跳转的其实位置
// SEEK_SET      文件的起始位置
// SEEK_CUR      当前读写位置
// SEEK_END      文件末尾位置
// offset: 偏移量
// fseek(fp, 0, SEEK_SET)    跳转到文件起始位置


int fread(void* ptr, size_t size, size_t nmemb, FILE* stream);
//ptr:用于接收数据的缓冲区
//size:要读取的块大小
//nmemb:要读取的块个数
//stream:文件流指针
//返回值:实际读取到的块个数    读到文件末尾:0

Linux下系统调用IO接口:int fd;

mode_t umask(mode_t mask);
//当前进程的文件创建权限掩码修改成为 mask
umask(0);    //设置umask是000,默认为002

int open(const char* pathname, int flags)
int open(const char* pathname, int flags, mode_t mode)
// 功能:打开文件
// pathname: 指定要打开的文件名称
// flags:     选项参数例如:O_RDONLY 等。         
// mode: 权限 mode & umask再取反得实际权限(umask一般默认002)
//       例如输入0777  ->  775(实际权限)
// 返回值:文件描述符(正整数)   失败返回 -1.
//如果有新文件生成必须指定第三个参数,设定权限,否则将出现错误

ssize_t read(int fd, void* buf, size_t count);
//从fd文件中读取count长度的数据,放到buf中。 
//count不能大于buf的大小。
//返回值:返回实际读取字节数, 已经读到文件末尾返回 0, 错误返回 -1;

ssize_t write(int fd, const void* buf, size_t count);
// fd: open打开文件所返回的文件描述符
// buf:要写入的数据
// count:要写入的字节数
// 返回值:实际写入的字节数(不一定等于count),失败返回 -1
char* buf = "jintian 9 du ";
ssiz_t ret = write(fd, buf, strlen(buf));

off_t lseek(int fd, off_t offset, int whence);
//跳转fd文件的读写位置到指定处
// whence   SEEK_SET      SEEK_CUR     SEEK_END      
// offset: 偏移量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值