【Linux】Linux文件IO常规操作

这篇具有很好参考价值的文章主要介绍了【Linux】Linux文件IO常规操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Linux 文件 IO 操作指的是在 Linux 系统上对文件进行读取和写入的操作。它是通过与文件系统交互来读取和写入文件中的数据。

在 Linux 中,文件被视为一系列字节的有序集合,每个文件都有一个相关联的文件描述符,用于标识该文件的唯一标识符。文件 IO 操作允许程序从文件读取数据或将数据写入文件。

文件 IO 操作通常包括以下几个主要方面:

open函数

int open(char *pathname, int flags); -->#include<unisd.h>

参数:
pathname :欲打开的文件路径名
flags:文件打开方式 -->需包含头文件#include<fcntl.h>
选项:
O_RDONLY:只读方式打开文件。
O_WRONLY:只写方式打开文件。
O_RDWR:读写方式打开文件。
O_CREAT:如果文件不存在,则创建该文件。
mode:文件的访问权限,常用的 mode 包括:
S_IRUSR:用户可读权限。
S_IWUSR:用户可写权限

返回值:
成功: 打开文件所得到对应的文件标识符(整数)
失败: -1 设置errno

int open(char *pathname, int flags mode_t mode); 

参数:
pathname :欲打开的文件路径名
flags:文件打开方式
mode:参数3使用的前提,参数2指定了O_CREAT 取值是8进制数,用来描述文件的访问权限
创建文件最终权限= mode & ~umask
返回值:
成功: 打开文件所得到对应的文件标识符(整数)
失败: -1 设置errno

  1 #include<stdio.h>
  2 #include<fcntl.h>
  3 #include<unistd.h>
  4 int main(void)
  5 {
  6  int fd;
  7  fd= open("./test.cp", O_,0551);
  8  printf("fd = %d\n" ,fd);
  9  close(fd);
 10  return 0;
 11 
 12 }
 13 

close函数

int close(int fd);

错误处理函数:
与errno相关

printf("xxx error: %s\n",errno);

read函数

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

参数:
fd :文件描述符
buf:存数据的缓冲区
count:缓冲区大小

返回值:
0:表示读到文件末尾
成功:读到的字节数
失败:-1,设置errno
如果-1 ,并且erron = EAGIN 或 EWOULDBLOCK,说明不是read失败,而是read再以非阻塞方式读取一个设备文件(网络文件),并且文件无数据

write函数

ssize_t write(int fd, const void* buf , size_t count);

参数:
fd: 文件描述符
buf:待写出数据的缓冲区
count:数据大小

返回值:
成功:写入的字节数
失败: -1 设置 errno

fcntl函数

int flgs = fcntl(fd,F_GETFL);

flgs|=O_NONBLOCK

fcntl(fd,F_GETFL,flgs);
获取文件状态:F_GETFL
设置文件状态:F_SETFL

文件描述符

PCB进程控制块:本质是结构体
成员:文件描述符表
文件描述符0/1/2/3/4…1023
0–STDIN_FILENO
1–STDOUT_FILENO
2–STDERR_FILENO

阻塞/非阻塞

是设备文件,网络文件的属性

阻塞:当进程调用一个阻塞的系统函数时,该进程被置于睡眠状态,这时内核调度其他进程运行,直到该进程等待的事件发生了,才会继续运行。
与睡眠状态相对的是运行状态,在Linux内核中,处于运行状态的进程分为两种状态:

正在被调度执行。CPU处于该进程的上下文环境中,程序计数器里保存着该进程的2指令地址,通常寄存器里保存着该进程运算过程的中间结果,正在执行该进程的指令,正在读写该进程的地址空间

就绪状态。 此进程随时可以执行,但是当CPU还在执行另一个进程时。该进程就会在一个就绪队列中等待被内核调用

产生阻塞的场景。读设备文件,读网络文件(读常规文件无阻塞概念)
/dev/tty --终端文件
open(“/dev/tty”,ORDWR|O_NONBLOCK)设置/dev/tty非阻塞状态(默认为阻塞状态)

lseek函数

off_t lseek(int fd, off_offset,int whence);

参数:
fd:文件描述符
offset:偏移量
whence:起始偏移位置:SEEK_SET/SEEK_CUR/SEEK_END
SEEK_SET:从文件开头计算偏移量。
SEEK_CUR:从当前位置计算偏移量。
SEEK_END:从文件结尾计算偏移量。

返回值:
成功:较起始位置偏移量
失败:-1 errno

查看:
od_tcx filename 查看文件的16进制
od_tcx filename 查看文件的16进制

应用场景:
1.文化的 读,写使用同一偏移位置
2.使用lseek获取文件大小
3.使用lseek拓展文件大小,要想使文件大小真正拓展,必须要引起IO操作。

传入参数

指针作为函数参数
通常有const关键字修饰
指针指向有效区域,在函数内部做读操作

传出参数

指针作为函数参数
在函数调用之前,指针指向的空间可以无意义,但必须有效
在函数内部,做写操作
函数调用结束后,充当函数返回值

传入传出参数

指针作为函数参数
在函数调用之前,指针指向的空间有实际意义
在函数内部,先做读操作 再做写操作
函数调用结束后,充当函数返回值

stat函数

获取文件属性,(从inode结构体中获取)

int stat(const char *path, struct stat *buf);

成返回0;
失败返回-1
设置errno为恰当值。
参数1:文件名
参数2:inode结构体指(传出参数)
文件属性将通过传出参数返回给调用者。

lstat函数

int lstat(const char *path, struct stat *buf);

成返回0;
失败返回-1 设errno为恰当值。文章来源地址https://www.toymoban.com/news/detail-743704.html

到了这里,关于【Linux】Linux文件IO常规操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

    在Linux系统编程中,文件IO操作是非常常见和重要的操作之一。通过文件IO操作,我们可以打开、读取、写入和关闭文件,对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 1.1 原型、参数及返回值说明 1.1.1 原型: open()函数是Linux系统

    2024年02月12日
    浏览(48)
  • Linux文件(系统)IO(含动静态库的链接操作)

    fopen打开文件,fclose关闭文件 fwrite操作(写文件) fwrite函数从 ptr 里将 nitems 个大小为 size 字节的数据写进定 stream 里 hello_w.c 文件 这里我们将会在此路径得到一个写有 5 行 hello fopen 的 myfile.txt 文件,如下gif: fread操作(写文件) fread 不会在字符串末尾添加 null 终止符( \\0

    2024年04月14日
    浏览(47)
  • 【探索Linux】—— 强大的命令行工具 P.11(基础IO,文件操作)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代码也相信大家都掌握的不错,上一篇文章我们了解了关于进程的地址空间,今

    2024年02月08日
    浏览(51)
  • Linux常规操作指南

    (1)查看当前目录内容 或查看详细信息: (2)切换工作目录 (3)创建新目录 (4)删除空目录 (5)删除文件或目录(递归删除) (1)复制文件或目录 (2)移动或重命名文件/目录 (3)查看文件内容 (4)编辑文件(使用vi/vim编辑器) 在vi中,输入 i 进入插入模式,编辑

    2024年01月19日
    浏览(55)
  • Linux 文件-基础IO

    文件=内容+属性 1 所有对文件的操作可分为两类:a 对内容操作 b 对属性操作 2 内容是数据,属性也是数据,存储文件必须既要存储内容,也要存储属性数据    默认文件在磁盘上 3 进程访问一个文件的时候,都要先把这个文件打开    打开前:普通的磁盘文件    打开后:将

    2024年02月22日
    浏览(49)
  • [Linux]文件IO

    摘于https://subingwen.cn,作者:苏丙榅 侵删 虚拟地址空间是一个非常抽象的概念,先根据字面意思进行解释: 它可以用来加载程序数据(数据可能被加载到物理内存上,空间不够就加载到虚拟内存中) 它对应着一段连续的内存地址,起始位置为 0。 之所以说虚拟是因为这个起始

    2024年02月11日
    浏览(36)
  • 【Linux】 基础IO——文件(下)

    修改test.c文件内容 运行可执行程序, 发现文件描述符返回的是3 但为啥是3,不是0 ,1,2 任何一个进程,在启动的时候,默认会打开当前进程的三个文件: 标准输入、标准输出、标准错误 ——本质都是文件 C语言:标准输入(stdin) 标准输出(stdout) 、标准错误(stderr) ——文件在

    2023年04月10日
    浏览(35)
  • Linux系统编程---文件IO

    一、系统调用 由操作系统实现并提供给外部应用程序的编程接口(Application Programming Interface,API),用户程序可以通过这个特殊接口来获得操作系统内核提供的服务 系统调用和库函数的区别: 系统调用(系统函数)     内核提供的函数 库调用                        

    2024年04月13日
    浏览(34)
  • Linux应用编程--IO文件

    【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1.pdf (gitee.com) (1)整个嵌入式linux核心课程包括5个点,按照学习顺序依次是:裸机,c高级,uboot和系统移植,linux应用编程和网络编程,驱动 (2)典型的嵌入式产品就是基于嵌入式linux操作系统来工作。典型的嵌入式产品的研发

    2024年02月07日
    浏览(88)
  • 【Linux】基础IO——文件系统

    磁盘计算机上唯一的一个机械设备,同时它还是外设 机械磁盘很便宜,虽然效率会慢一些,所以企业一般使用机械磁盘,因为便宜 磁盘不仅仅外设,还是一个机械设备(盘片、磁头),所以磁盘一定非常慢 盘片:一片两面,有一摞盘片 磁头:一面一个磁头 一个磁头负责一面的

    2023年04月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包