【Linux】Linux文件IO常规操作-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

这里写目录标题

前言

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文件名
参数2inode结构体指(传出参数)
文件属性将通过传出参数返回给调用者。

lstat函数

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

成返回0
失败返回-1 设errno为恰当值。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux

“【Linux】Linux文件IO常规操作-CSDN博客” 的相关文章