02 文件 io

本文详细介绍了在Linux环境下使用C语言进行文件操作,包括open()函数创建和打开文件、close()关闭文件、read()和write()读写文件以及lseek()移动文件指针的功能和用法。
摘要由CSDN通过智能技术生成

Linux下一切皆文件(lcd、触摸屏、usb等)

open函数:创建和打开文件

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

//参数解释
pathname:文件的路径
flags:
			O_RDONLY:只读
			O_WRONLY:只写
			O_RDWR:可读可写
			O_CREAT:如果没有该文件,创建该文件
			O_TRUNC:如果文件存在,删除原有信息
			O_APPEND:文件已经存在,以追加的形式打开文件
mode:如果文件被新建,指定其权限为mode(以八进制书写,如:0777//函数返回值
成功:文件描述符
失败:-1

//文件描述符
当 open 成功打开或创建一个文件时,就用一个非负整数表示这个文件,这个非负整数就是文件描述符,范围:0~1023,其中 0,1,2 已经被程序占用(默认被打开)

示例代码:

//头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main(int argc, char const *argv[])
{
	//可读可写形式打开文件
	int fd1 = open("./1.c",O_RDWR);
	if(lcd_fd < 0)//出错处理
	{
		perror("open file failed");//打印出错信息
		return -1;
	}
	printf("文件描述符fd1:%d\n", fd1);
	printf("文件打开成功\n");
	
	//以可读可写形式打开文件,如果没有该文件则创建该文件
	int fd2=open("./2.c",O_RDWR|O_CREAT,0777);
	if (fd2<0)//
	{
		perror("open file failed");//打印出错信息
		return -1;
	}
	printf("文件描述符fd2:%d\n", fd2);
	printf("文件打开成功\n");
}

close函数:关闭文件

//头文件
#include <unistd.h>

//函数原型
int close(int fd);

//参数
fd:文件描述符

示例代码:

//头文件
#include <unistd.h>
close(fd1);
close(fd2);

read/write函数:读取/写入文件

//头文件
#include <unistd.h>

//函数原型

//读取函数
ssize_t read(int fd, void *buf, size_t count);
//参数
fd:文件描述符
buf:将从文件读取的数据放在 buf 缓冲区
count:想要读取的字节数,未知数
//返回值
	成功:实际读出的字节数
	失败:-1 

//写入函数
ssize_t write(int fd, const void *buf, size_t count);
//参数
fd:文件描述符
buf:将要写入的数据放在 buf 缓冲区
count:想要写入的字节数,已知数
//返回值
	成功:实际写入的字节数
	失败:-1 

示例代码:

//新建1.txt,1.txt中存放一些字符串

//从 1.txt 中读取数据
int fd1=open("./1.txt",O_RDWR,0777);
char buf[100]={0};
read(fd1,buf,sizeof(buf));
printf("buf = %s\n",buf);

//往 2.txt 中写入数据
int fd2=open("./2.txt",O_RDWR | O_CREAT,0777);
char msg[100] = "hello world";
write(fd2,msg,strlen(msg));
close(fd2);
close(fd1);

lseek函数:使光标进行偏移

//头文件
#include <sys/types.h>
#include <unistd.h>

//函数原型
off_t lseek(int fd, off_t offset,int whence);
//参数
offset:偏移量,可以为负数,表示往前偏移
whence:基准点
	SEEK_SET:文件开头处
	SEEK_CUR:当前位置
	SEEK_END:文件末尾
//返回值
	成功:新的文件位置的偏移量
	失败:-1

示例代码:

#include <sys/types.h>
#include <unistd.h>

lseek(fd1,0,SEEK_SET);
lseek(fd1,-1,SEEK_END);
int file_size=lseek(fd1,0,SEEK_END);
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值