Linux操作文件IO
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_out
chmod 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

Linux操作文件IO的更多相关文章
- linux中文件IO
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...
- linux下 文件IO 相关
linux下操作文件或设备,需要一个文件描述符 file descriptor,fd 来引用.fd是一个非负整数,实际上是一个索引值,指向文件的记录表,对文件的操作都需要fd.默认的几个:标准输入流 ...
- 漫谈linux之文件IO篇(SSD写性能和机械硬盘差不多,读是4到10倍)
前同事的文章,觉得写得很清晰,收藏了. http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术 ...
- Linux C 文件IO
文件IO 2021-05-31 12:46:14 星期一 目录 文件IO 基础IO open 错误 creat read 一个例子 write close lseek 文件空洞 unlink删除 io ...
- 【Linux】文件IO --- sync、fsync、fdatesync
在使用write函数向文件中写入数据的时候,并不是在调用了函数以后就直接把数据写入磁盘:操作系统在内核中设置了一块专门的缓冲区,数据会先被写入到内核的缓冲区中,等到缓冲区满了或者系统需要重新利用缓冲区 ...
- linux 操作文件夹
创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录. 二.mkdir命令使用格式 格式:mkdir [选项] DirNa ...
- linux操作文件和文件夹
rm filerm -rf folder如将/test1目录下的file1复制到/test3目录,并将文件名改为file2,可输入以下命令:cp /test1/file1 /test3/file2 如 ...
- imx6用文件io操作gpio
具体请参考: http://blog.csdn.net/u014213012/article/details/53140781 这里要注意的是: 要让linux支持文件io方式操作gpio,首先驱动必 ...
- Linux系统编程--文件IO操作
Linux思想即,Linux系统下一切皆文件. 一.对文件操作的几个函数 1.打开文件open函数 int open(const char *path, int oflags); int open(c ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
随机推荐
- 正也科技S2P 数字化推动医药信息传播多元化
在当今数字化迅猛发展的时代浪潮中,医药信息传播正经历着深刻而广泛的变革.这种变革犹如一场波澜壮阔的革命,席卷了医药领域的每一个角落,对医药行业的发展产生了深远且不可忽视的影响. 一.传播渠道的多元化拓 ...
- 一图归纳三大种类矩阵范数:诱导范数,元素范数,Schatten范数,涵盖谱范数,2范数
转载自:https://blog.csdn.net/qq_27261889/article/details/87902480
- vscode+evernote印象笔记+markdown写在线笔记
1. vscode安装evermonkey插件 2. vscode快捷键:Ctrl+Shift+P ,输入ever 按提示进行操作 Ever New: 创建新evernote笔记: 愉快地玩耍 点击下 ...
- 数据万象AVIF图片压缩 - 小程序省流量利器
导语 微信小程序因其便捷的开发环境和天然的微信生态,使得越来越多企业平台通过小程序建立自己的业务.在小程序上使用图片非常广泛,但传统格式图片(如 JPG/PNG)占用空间大,加载速度慢,可能导致昂贵的 ...
- vue3笔记
如何创建vue3项目 基于 vue 脚手架 npm i @vue/cli -g vue create <project-name> cd <project-name> npm ...
- Dart代码混淆
Dart代码混淆 代码混淆是修改应用程序的二进制文件以使其更难被人类理解的过程.混淆会在编译后的 Dart 代码中隐藏函数和类名称,将每个符号替换为另一个符号. Flutter 的代码混淆仅适用于re ...
- MAC清理
今日分享 Mac清理 有很多三方软件可以清理,以前用过腾讯的柠檬lite,每次就清个几百兆,系统数据感觉还是得自己手动清理才行 今天电脑又在提醒储存空间不足了,一看占用发现系统数据占了100多个G,学 ...
- ng-alain: 配置开发环境
配置 ng-alain 开发环境 安装 1. Yarn 官方文档实际上是基于 Yarn 1 的,请从 Yarn 1 开始.在创建项目之后,可以升级到 Yarn 3. 注意:直接通过 npm 安装 ya ...
- Jenkins入门使用
Jenkins入门使用 1先安装jdk才能运行jenkins yum install -y java-1.8.0-openjdk.x86_64 2 安装jenkins,运行,进行端口绑定,启动jenk ...
- 深度解析Mamba与状态空间模型:一图带你轻松入门
1.概述 Transformer架构无疑是大型语言模型(LLMs)成功背后的核心动力.从开源的Mistral到封闭的ChatGPT,几乎所有主流的LLM都在使用这一架构.然而,随着技术的不断进步,研究 ...