文件数据的I/O,文件偏移,内存映射

这篇博客详细介绍了Linux系统中文件的读写操作,包括read()和write()函数的使用,以及文件偏移量的概念。文件偏移量可以通过lseek()函数进行调整。此外,文章还探讨了内存映射,解释了其与传统文件I/O的区别,并展示了如何使用mmap()、memcpy()和munmap()函数实现内存映射到LCD设备以显示颜色。最后,给出了多个练习帮助读者巩固理解。
摘要由CSDN通过智能技术生成

一、文件数据输出/输入。
1、如何读取文件的数据?  -> read()  -> man 2 read
函数功能:read from a file descriptor
    //读取一个文件描述符的数据
头文件:
    #include <unistd.h>

原型:
    ssize_t read(int fd, void *buf, size_t count);

参数:
    fd:文件描述符
    buf:数据缓冲区
    count:尝试读取的字节数(愿望值)

返回值:
    成功:已经成功读取到的字节数
    失败:-1

  例子1: 尝试从文本中读取一些数据出来。

注意:从文本文档中读取出来的数据,都是字符串。

int main(int argc,char *argv[])
{
    //1. 打开目标文件
    int fd;
    fd = open("./test.txt",O_RDONLY);
    if(fd < 0)
    {
        printf("open file error!\n");
    }
    
    //2. 读取数据
    char buf[100] = {0};
    int n;
    n = read(fd,buf,5);
    printf("n = %d\n",n);
    printf("from file:%s\n",buf);
    
    //3. 关闭文件
    close(fd);
    
    return 0;
}
结果:
n = 10
from file:helloworld

   练习1: 重复读取一个文件,那么第二次读取的时候是在第一次基
础上继续读,还是重新读?  -> 继续读

int main(int argc,char *argv[])
{
    //1. 打开目标文件
    int fd;
    fd = open("./test.txt",O_RDONLY);
    if(fd < 0)
    {
        printf("open file error!\n");
    }
    
    //2. 读取数据
    char buf[100] = {0};
    int n;
    n = read(fd,buf,5);
    printf("n = %d\n",n);
    printf("from file:%s\n",buf); //hello
    
    n = read(fd,buf,5);
    printf("n = %d\n",n);
    printf("from file:%s\n",buf); //world
    
    //3. 关闭文件
    close(fd);
    
    return 0;
}

2、写入数据到文件中。 -> write()  -> man 2 write
函数功能: write to a file descriptor
    //写入数据到文件描述符中
头文件:
    #include <unistd.h>

原型:
    ssize_t write(int fd, const void *buf, size_t
count);
参数:
    fd:文件描述符
    buf:需要写入到文件中的内容
    count:写入的字节数

返回值:
    成功:真正写入字节数
    失败:-1

  例子2:尝试写一些数据到空白的文件中。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#inclu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值