c/c++文件打开、关闭、读写操作
C语言文件操作:本文参考《尚硅谷嵌入式技术之Linux应用层开发》
一、标准库文件



















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




例如:

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);




举例:
#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; }

浙公网安备 33010602011771号