关于文件读写操作

本文详细介绍了嵌入式系统中的文件读写操作,包括使用C语言进行文件的打开、读取、写入和关闭的基本流程。通过具体代码示例,展示了如何利用Linux API如open、read、write和close进行文件操作,并解释了文件描述符、缓冲区及错误处理的重要性。
摘要由CSDN通过智能技术生成

朱老师嵌入式核心课程笔记
文件读写操作

文件读写操作代码段

    #include<stdio.h>
    
    //使用man查询得出文件读写API所需要的头文件
    //man 1 xx查linux shell命令,man 2 xxx查API, man 3 xxx查库函数
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<string.h>
    #include <unistd.h>
    
    int main()
    {
    	int fd = -1;                //file description 文件描述符
    	int ret = 0;
        char buf[100] = {0};
    	char writebuf[20] = "hello man";
    	//打开文件
    	fd = open("a.txt", O_RDWR);
    	if(-1 == fd)				//也可以写成if(fd < 0),打开正确,则返回一个新的文件描述符,否则返回-1
    	{
    		printf("open error\n");
    	}
    	else
    	{
    		printf("open a.txt successful, fd = %d\n",fd);
    	}
    	//读写文件
    	
    	//写文件
    	ret = write(fd, writebuf, strlen(writebuf));
    	if(-1 == ret)
    	{
    		printf("write error\n");
    	}
    	else
    	{
    		printf("write successfully, ret = %d\n", ret);
            printf("[%s]\n", writebuf);
        }
    		
    	//读文件
    	ret = read(fd, buf, 20);
    	if(-1 == ret)
    	{
    		printf("read error\n");
    	}
    	else
    	{
    		printf("read successfully, ret = %d\n", ret);
    		printf("读取内容是:[%s]\n", buf);
    	}
    	
    	//ssize_t write(int fd, const void * buf, size_t count);
    	//ssize_t read(int fd, void * buf, size_t count);	//ssize_t类型是typedef重定义的一个类型,其实就是int
    	
    	//关闭文件
    	close(fd);
    	return fd;
   }

关于文件读写操作涉及的API

  • read
    #include <unistd.h>

    ssize_t read(int fd, void *buf, size_t count);
    
  • write
    #include <unistd.h>

    ssize_t write(int fd, const void *buf, size_t count);
    
  • 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);
    int creat(const char *pathname, mode_t mode);
    
  • close
    #include <unistd.h>

    int close(int fd);
    

Ⅰ. errno 和 perror
① errno,错误号码,对各种错误做编号,当函数执行错误时,函数返回特定编号告知错误;
② errno,由OS维护的一个全局变量;
③ errno,本质是一个int类型的数字,由数字对应错误;
④ perror,为使数字对应相应错误,Linux提供一个函数perror(printf error), perror函数内部读取error并且将相应数字对应的错误打印显示;
⑤ perror,可借用该函数得出错误原因,perror(" XXX 错误 “); 代替 printf(” XXX错误 ");

Ⅱ. 文件I/O和标准I/O
① 文件I/O,open,close,read,write等API函数构成的一套用来读写文件的体系,效率不够高;
② 标准I/O,应用层c语言库封装的文件读写函数(fopen,fclose,fread,fwrite),在应用层添加了一个buf,fwrite写入的内容不会直接存入内核buf中,而是进入应用层标准I/O库中的buf,根据OS单次count来选择好的时机来完成write到内核中的buf,再根据硬盘特性来选择时机写入到硬盘中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值