c/c++文件打开、关闭、读写操作

C语言文件操作:本文参考《尚硅谷嵌入式技术之Linux应用层开发》

一、标准库文件

image

 

image

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 二、系统调用(系统调用是操作系统内核提供给应用程序,使其可以间接访问硬件资源的接口)

 

image

 

image

 

image

image

 例如:

image

 

2)read
read()系统调用用于读取已经打开的文件描述符。
#include <unistd.h>
/*
int __fd:一个整数,表示要从中读取数据的文件描述符
void *__buf:一个指向缓冲区的指针,读取的数据将被存放到这个缓冲区中(此处的buf是用户自己定义的,用来存储通过内核读取到的数据,自定义的缓冲区
size_t __nbytes:一个 size_t 类型的整数,表示要读取的最大字节数 系统调用将尝试读取最多这么多字节的数据,但实际读取的字节数可能会少于请求的数量(此处一般为buf的大小
return: (1) 成功时,read()返回实际读取的字节数 这个值可能小于__nbytes,如果遇到了文件结尾(EOF)或者因为网络读取等原因提前结束读取
(2) 失败时,read()将返回-1
*/
ssize_t read (int __fd, void *__buf, size_t __nbytes);
 
 

image

image

 

image

 

image

 举例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char const *argv[])
{
    int fd = open("io.txt", O_RDONLY | O_CREAT, 0644); // 权限部分只有设置了O_CREAT,才需要设置后面的权限
    if (fd == -1)
    {
        perror("open");
        exit(EXIT_FAILURE);
    }
    char buffer[5]; // 创建一个缓冲区来存放读取的数据(是用户自定义的存储读到的缓冲区)
    ssize_t bytes_read;
    while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0) // 这句话是先读sizeof(buffer)个数据,然后返回实际读取的字节数,然后再度后面的数据
    {

        // 将读取的数据写入标准输出
        write(STDOUT_FILENO, buffer, bytes_read); // 将数据写入标准输出,此处bytes_read一般为上面读取的数据的大小

        printf("\n%ld\n", bytes_read);
        sleep(1);
    }
    if (bytes_read == -1)
    {
        perror("read");
        close(fd);
        exit(EXIT_FAILURE);
    }
    close(fd); // 使用完毕后关闭文件描述符
    return 0;
}

 

posted @ 2025-10-19 08:28  小小仓鼠  阅读(10)  评论(0)    收藏  举报