1、文件I/O 文件 I/O(Input/Output)是指程序与文件之间进行数据交换的过程。在计算机编程中,文件 I/O 是通过读取和写入文件来实现数据的输入和输出操作。...在Linux系统中,一切皆文件是其核心设计理念之一,因此文件I/O操作在Linux系统中显得尤为重要。 1.1、文件描述符 文件描述符是操作系统中用于标识打开文件的整数值。...O_DIRECT:直接IO方式打开文件,绕过系统缓存,数据直接读写到磁盘。 O_TMPFILE:创建一个临时文件,文件在关闭时自动删除。...在Linux系统中,文件描述符是有限资源,因此在不再需要使用文件时,应该及时关闭,以释放资源并避免资源泄漏。...许多程序都依赖于这一特性,因此没有显式地使用 close 函数来关闭文件。 然而,显式关闭不再需要的文件描述符通常是良好的编程习惯。
在 Linux 中,用户程序不能直接访问内核提供的服务,必须通过系统调用来使用内核提供的服务。...Linux 中的用户编程接口(API)遵循了 UNIX 中最流行的应用编程界面标准—— POSIX。这些系统调用编程接口主要是通过 C 库(libc)实现的。...往期传送门: 史上最全的Linux常用命令汇总(超详细!...超全面)收藏这一篇就够了 Linux下标准IO的这些操作你清楚吗(内附有详细的介绍和例程) 文章目录 文件I/O简介 文件描述符 文件I/O与标准I/O区别 打开文件(open) 关闭文件(close...文件描述符是一个非负整数,Linux为程序中每个打开的文件分配一个文件描述符 文件描述符从0开始分配,依次递增 文件IO操作通过文件描述符完成 注意:每个程序中打开的文件系统会单独分配文件描述符,互相不影响
文章目录 Linux下的文件 文件描述符 文件I/O操作 打开/创建文件 关闭文件 读取/写入文件 文件指针偏移 测试代码示例 ---- Linux下的文件 引用一句经典的话:“UNIX下一切皆文件...文件是一种抽象机制,它提供了一种方式用来存储信息以及在后面进行读取。 在创建一个文件后,它会给文件一个命名。当进程终止时,文件会继续存在,并且其他进程可以使用名称访问该文件。...文件描述符 在Linux下用文件描述符来表示普通文件和设备文件。文件描述符是一个整型的数据,所有对文件的操作都通过文件描述符完成。...在Linux系统中有三个已经被分配的文件描述符,分别是: 0 STDIN_FILENO 标准输入流 1 STDOUT_FILENO 标准输出流 2 STDERR_FILENO 标准错误流 这三个文件描述符和它们各自的功能是绑死的...---- 文件I/O操作 打开/创建文件 在Linux下,用open函数可以用来打开或创建一个文件: #include #include #include
include #define BUFFER_SIZE 1024 /* 每次读写缓存大小,影响运行效率*/ #define SRC_FILE_NAME "src_file" /* 源文件名...*/ #define DEST_FILE_NAME "dest_file" /* 目标文件名文件名 */ #define OFFSET 10240 /* 拷贝的数据大小 */ int main...() { int src_file, dest_file; unsigned char buff[BUFFER_SIZE]; int real_read_len; /* 以只读方式打开源文件...*/ src_file = open(SRC_FILE_NAME, O_RDONLY); /* 以只写方式打开目标文件,若此文件不存在则创建, 访问权限值为644 */ dest_file...10KB的起始位置*/ lseek(src_file, -OFFSET, SEEK_END); /* 读取源文件的最后10KB数据并写到目标文件中,每次读写1KB */ while ((real_read_len
标准文件访问方式 ---- 直接IO方式 OPEN +O_DIRECT = 绕过内核缓冲区的直接访问,有效避免了CPU和内存的多余时间开销。要求内存边界对齐。...注意:直接IO的缺点就是如果访问的数据不在应用程序缓存中,那么每次数据都会直接从磁盘进行加载,这种直接加载会非常慢,通常直接IO跟异步IO结合使用会得到较好的性能。...\n"); if (buf)free(buf); close(fd); return 0; } ---- 直接IO和标准方式进行对比 **示例:**测试20s内对同一文件的读取次数0 #define...---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。
这是我们嵌入式Linux开发与应用这门课的老师经常挂在嘴边的一句话。足以体现出在Linux操作系统中,对于一切资源的管理都是对文件的操作。...Linux系统中每一个分区都是一个文件系统,都有自己的目录层次。Linux会将这些在不同分区的,单独的文件系统按一定的方式形成一个系统的总目录层次结构。...Linux采用的是标准的目录结构——树形结构(B树家族) Linux既然采用了树形结构的目录形式,整个OS只有一棵文件树,这样方便OS对文件进行统一管理。...Linux文件分类: 普通文件:用户和OS的数据,程序等信息文件 目录文件:Linux文件系统将文件索引节点号和文件名同时保存在目录中,所以目录就是一张表。...Linux文件描述符 在Linux下当一个进程打开文件的时候,OS会返回相应的文件描述符,程序为了处理该文件必须使用这个文件描述符。文件描述符是一个正整数。
一、读取文件元数据 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat...mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ 硬链接是不可以跨越文件系统的..., sbuf.st_mode & 0777, perm); // 0777 是八进制数 return 0; } 测试如下: simba@ubuntu:~/Documents/code/linux_programming.../APUE/File_IO$ ....比如在同一个磁盘上面不同的文件系统,设备驱动程序相当,但是次设备号不同。 st_rdev只有字符特殊文件和块特殊文件才有这个值,表示实际设备的设备编号。
文件系统 文件描述符 一个进程默认打开三个文件描述符 STDIN_FILENO 0 STDOUT_FILENO 1 STDERR_FILENO 2 新打开文件返回文件描述符表中未使用的最小文件描述符...const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功返回新分配的文件描述符
文件操作 在进行 Linux 文件操作之前,我们先简单了解一下 Linux 文件系统 Linux文件类型 Linux中文件类型分为以下这几种: 符号 文件类型 - 普通文件 d 目录文件,d是directory...user 文件所属组用户 group 其他用户 other u g o + 和 - 分别表示增加和去掉相应权限 简单的了解了Linux下的文件操作之后就开始进入代码编程阶段 Linux error.../main open: No such file or directory 系统IO函数 UNIX环境下的C对二进制流文件的读写有两种体系: fopen,fread,fwrite ; open, read...read/write 文件I/O最基本的两个函数就是read和write,在《unix/linux编程实践教程》也叫做unbuffered I/O。.../main file len:4 linux下的标准输入/输出/错误 在文件IO操作里面一直讲到文件描述符,那我就不得不提一下linux中的标准输入/输出/错误 在C语言的学习过程中我们经常看到的stdin
文件IO 文件的常识 基础IO 为什么要学习操作系统的文件操作 C语言对于函数接口的使用 接口函数介绍 如何理解文件 文件描述符 重定向 更新给模拟实现的shell增加重定向功能 为什么linux下一切皆文件...为什么linux下一切皆文件? 比如一些硬件,他们有自己的内核数据结构,他们每个都有自己的读写方法(键盘没有写功能,那就指向空),每种硬件读写方式都是不同的。...所以操作系统看来,只需要调用file就可以了,所以说linux下皆文件。...刚才打印的代码说明,不在linux内核中,要不然wirte也会被打印两次。 其实我们所说的缓冲区是语言层次的缓冲区!因为在操作系统看来他也只是一块内存而已!...Linux中的FILE结构体: 在/usr/include/libio.h struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC;
转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/91127921 Linux...文件描述符 在Linux下当一个进程打开文件的时候,OS会返回相应的文件描述符,程序为了处理该文件必须使用这个文件描述符。...Linux操作系统给我们提供了6个系统调用create,open,write,close,read,lseek。系统调用是不带缓冲区的。他们是POSIX标准提供的。...当Linux系统函数出错的时候,一般会返回一个负值给errno。POSIX和ISO C将errno定义为一个符号。...注意:在使用Linux的系统调用操作文件的时候,是无缓冲的,这点很重要。当你在做少量,大批次写入的时候效率会很低。因此注意使用缓冲(用数组的之类的暂时保存一下),能提高I/O效率。
Linux 文件 I/O(Input/Output)基础是 Linux 应用程序开发中的重要组成部分。在 Linux 系统中,文件 I/O 涉及到文件的读取和写入,以及文件描述符、系统调用等概念。...以下是 Linux 文件 I/O 的基础知识: 1. 文件描述符 在 Linux 中,每个打开的文件都与一个文件描述符相关联。文件描述符是一个非负整数,表示进程中打开文件的引用。...通常,文件描述符的值为 0、1 和 2,分别代表标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。 2. 打开文件 要在 Linux 中进行文件 I/O,首先需要打开文件。...fileDescriptor = open("example.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); const char* data = "Hello, Linux...文件和目录操作 Linux 提供了一系列的文件和目录操作函数,可以用于获取和修改文件和目录的属性。
简介 嵌入式Linux下串口编程与Linux系统下的编程没有什么区别,系统API都是一样的。...嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。..." /*************************************** *name : open_port *功能描述: 打开串口 *入口参数: 串口号 *返 回 值: 成功返回文件描述符...} return fd; } /****************************** *name : set_port *功能描述: 设置串口参数 *入口参数: fd 文件描述符
存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读、写操作就是对文件的读、写操作,从而能够不再使用read、write系统调用。...MAP_SHARED:表示存储操作相当于对该文件的write。 MAP_PRIVATE:对映射区的存储操作导致创建该映射文件的一个私有副本。...filedes:指定要被映射的文件描写叙述符,映射之前须要先打开该文件。 off:要映射字节在文件里的起始偏移量。通常为0。...lseek + write的组合操作使得目标文件的大小添加到和源文件大小同样。由于当lseek设置的文件偏移量大于文件当前长度时。下一个写操作将会使文件增大。假设没有对目标文件扩大。...參考: 《unix环境高级编程》 P390-P395.
前言 Linux 文件 IO 操作指的是在 Linux 系统上对文件进行读取和写入的操作。它是通过与文件系统交互来读取和写入文件中的数据。...在 Linux 中,文件被视为一系列字节的有序集合,每个文件都有一个相关联的文件描述符,用于标识该文件的唯一标识符。文件 IO 操作允许程序从文件读取数据或将数据写入文件。...文件 IO 操作通常包括以下几个主要方面: open函数 int open(char *pathname, int flags); -->#include 参数: pathname...与睡眠状态相对的是运行状态,在Linux内核中,处于运行状态的进程分为两种状态: 正在被调度执行。...读,写使用同一偏移位置 2.使用lseek获取文件大小 3.使用lseek拓展文件大小,要想使文件大小真正拓展,必须要引起IO操作。
在Linux系统中,I/O操作可以分为两种模式:阻塞式I/O和非阻塞式I/O。 这两种模式决定了进程在执行I/O操作时的行为方式,以及CPU资源的利用效率。...例如: 对于普通文件(如文本文件),即使读写的数据量较大,read()或write()总会在有限时间内返回。这是因为普通文件的I/O操作不会阻塞。...对于特殊类型的文件,如管道文件、网络套接字和字符设备文件,如果在读取数据时文件无数据可读,进程会被阻塞,直到有数据可用时才被唤醒。...以鼠标输入设备文件为例,Linux中鼠标对应的设备文件通常位于/dev/input/目录下,命名为mouseX(X为序号)或eventX。...如果没有输出,说明该设备文件不是鼠标对应的设备。
一、read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: ssize_t...read(int fd, void *buf, size_t count); 参数: fd :想要读的文件的文件描述符 buf : 指向内存块的指针,从文件中读取来的字节放到这个内存块中 count...: 从该文件复制到buf中的字节个数 返回值: 如果出现错误,返回-1;读文件结束,返回0;否则返回从该文件复制到规定的缓冲区中的字节数 二、write系统调用 用write()系统调用将数据写到一个文件中...四、文件的随机读写 到目前为止的所有文件访问都是顺序访问。这是因为所有的读和写都从当前文件的偏移位置开始,然后文件偏移值自动地增加到刚好超出读或写结束时的位置,使它为下一次访问作好准备。...有个文件偏移这样的机制,在Linux系统中,随机访问就变得很简单,你所需做的只是将当前文件偏移值改变到有关的位置,它将迫使下一次read()或write()发生在这一位置。
浅析 Linux 文件 IO 读写 Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一)。...读者可以参考以下这个图: image.png https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0...Linux的IO调度器称为evelator(电梯),因为Linus开始实现这个系统的时候,使用的就是电梯算法。...在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的...IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。
预备知识 文件= 内容+属性 对应文件的操作,对内容的操作,对属性的操作 当文件没有被操作的时候,一般在磁盘中 当对文件进行操作的时候,一般在内存中,因为冯诺依曼体系规定 当我们对文件进行操作的时候...,文件需要提前加载到内存中,提前加载的是属性 当我们对文件进行操作的时候,文件需要提前加载到内存中,不只有你在load,内存中一定存在大量的不同文件属性 打开文件本质就是将需要的属性加载到内存中,OS内部一定会同时存在大量的被打开的文件...而fp打开的文件为log.txt,所以将msg数据打印到log.txt文件中 ---- 因为Linux中一切皆文件,所以也可以传入stdout(标准输出流)中,stdout也对应一个文件,即显示器文件...,通过创建文件并打开文件,发现新文件的权限不正常 ---- 因为在Linux中创建一个文件需要有对应的权限的 int open(const char *pathname, int flags, mode_t...char buffer[1024]; ssize_t n= read(fd,buffer,sizeof(buffer)-1);//使用系统接口来进行IO
char buffer[1024]; ssize_t n= read(fd,buffer,sizeof(buffer)-1);//使用系统接口来进行IO...(cerr) ——文件在系统层的表现,它是一个类 ---- 因为Linux下一切皆文件,所以向显示器打印,本质就是向文件中写入 标准输入---设备文件--->键盘文件 标准输出---设备文件--->...如何理解Linux下的一切皆文件?...要有数据放到缓冲区里,底层读写时只需要调用对应的方法,来完成对应的读写,不关心底层的差异化 操作系统也有自己的wirte和read,本质上是拷贝,将应用层的数据拷贝到缓冲区里,在调用底层不同设备的方法,所以看起来就是Linux...——dup2 输入 man dup2 查看 刚刚重定向时,需要先关闭文件描述符1,再打开文件 现在可以直接将文件打开,使用dup2重定向 输出重定向对应的文件描述符是1 打开myfile文件,假设其文件描述符是
领取专属 10元无门槛券
手把手带您无忧上云