Linux操作文件IO
参考自:【北京迅为】嵌入式linux开发指南_v1.1(i.MX6ULL)
文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制;
标准 IO 是 C 语言函数库里的标准 I/O 模型,在 stdio.h 中定义,通过缓冲区操作文件,带缓存机制。Linux 系统中一切皆文件,包括普通文件,目录,设备文件(不包含网络设备),管道,fifio 队列,socket 套接字等,在终端输入“ls -l”
可查看文件类型和权限。
文件 IO 是直接调用内核提供的系统调用函数,头文件是 unistd.h,标准 IO 是间接调用系统调用函数,
头文件是 stdio.h,文件 IO 是依赖于 Linux 操作系统的,标准 IO 是不依赖操作系统的,所以在任何的操作系
统下,使用标准 IO,也就是 C 库函数操作文件的方法都是相同的。
对于文件 IO 来说,一切都是围绕文件操作符来进行的。在 Linux 系统中,所有打开的文件都有一个对
应的文件描述符。文件描述符的本质是一个非负整数,当我们打开一个文件时,系统会给我们分配一个文
件描述符。当我们对一个文件做读写操作的时候,我们使用 open 函数返回的这个文件描述符会标识该文件,
并将其作为参数传递给 read 或者 write 函数。在 posix.1 应用程序里面,文件描述符 0,1,2 分别对应着标准输
入,标准输出,标准错误。
1、新建文件IO操作c语言文件
vim add_file.c
#include <stdio.h> // 引入标准输入输出库#include <stdlib.h> // 引入标准库,用于exit等函数#include <sys/types.h> // 引入系统数据类型定义#include <sys/stat.h> // 引入文件状态操作库#include <fcntl.h> // 引入文件控制库,用于文件操作int main(int argc*,char *argv[]) // 主函数,argc为命令行参数个数,argv为参数数组{int fd; // 定义文件描述符变量fd// 打开文件"file.c",fd=open("file.c",O_CREAT|O_RDWR,0666);//O_CREAT表示如果文件不存在则创建,//O_RDWR表示读写权限,0666表示文件权限为rw-rw-rw-if(fd<0)printf("open is error\n");printf("fd is %d\n",fd);return 0; }
该代码大致意思是在当前目录先打开文件file.c,若没有这个文件,则会先新建,并设置可读可写权限,结束后打印该文件文件描述符
2、交叉编译,赋权,执行
gcc add_file.c -o add_file_outchmod 777 add_file_out./add_file_out
注:想在linux中执行c语言构建的程序,需要使用交叉编译链生成对应本机位数和架构的链接文件执行。
例如我使用默认gcc编译出的链接文件类型是ARM64位,对应本机,可直接执行。
3、执行结果:
这意味着open
函数成功返回的文件描述符是3
。这表示系统为你的进程分配了一个新的文件描述符3
来表示file.c
文件。由于标准输入、标准输出和标准错误已经使用了文件描述符0
、1
和2
,因此file.c
文件的文件描述符从3
开始。
ls查看,成功新建文件file.c