学习
实践
活动
工具
TVP
写文章

文件 IO 与标准 IO

文件 I/O 指的是对文件的输入/输出操作,就是对文件的读写操作;Linux 下一切皆文件文件作为 Linux 系统设计思想的核心理念,在 Linux 系统下显得尤为重要,所以对文件的 I/O 操作既是基础也是最重要的部分 一个通用的 IO 模型通常包括打开文件、读写文件、关闭文件这些基本操作,主要涉及到 4 个函数:open()、read()、write()以及 close()。 文件IO tips:我们在 Linux 系统下,可以通过 man 命令查看某函数的用法和帮助信息以及头文件引用信息。 int flags); int open(const char *pathname, int flags, mode_t mode); 在 Linux 内核提供的标准文件 IO 中,主要以文件描述符fd > ssize_t read(int fd, void *buf, size_t count); 关闭文件 #include <unistd.h> int close(int fd); 标准IO

44440

文件IO

1.3 open/close 首先了解一下文件描述符,和文件描述符表。 注意:以下内容记住基于进程,所以文件描述符和符表都存在PCB里面了。 文件描述符表:纪录文件描述符使用情况的表。 之后再开辟新文件就会生成新的文件描述符,默认使用空闲的最小的文件描述符。 O_CREAT 若文件不存在则创建,仅此处会用到第三个参数,赋予文件权限 O_EXCL 和 O_CREAT 共用,如果文件已存在则出错返回 O_TRUNC 这个咱也没用过,如果文件已存在,并且有可写模式打开 参数释义:fd文件描述符 offset:偏移量 whence:偏移的起始位置 whence: SEEK_SET:从文件开始处计算 SEEK_CUR:从当前文件偏移处计算 SEEK_END:从文件结束处计算 1.7 fcntl 可以用fcntl对一个已打开的文件进行修改属性,而不必重新open一个文件 不过这个我是没试过了 不过文件锁需要用到这个 Linux中文件记录锁可以对文件某一区域进行文件记录锁的控制

23520
  • 广告
    关闭

    2022腾讯全球数字生态大会

    11月30-12月1日,邀您一起“数实创新,产业共进”!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    文件IO

    Hi~朋友,关注置顶防止错过消息 文件IO的分类有哪几种? 缓冲与非缓冲IO 直接与非直接IO 阻塞与非阻塞 同步与异步IO 缓冲与非缓冲IO的区别? 根据是否利用标准库缓冲,可以把文件IO分为缓冲IO和非缓冲IO: 缓冲IO,利用标准库的缓存实现文件的加速访问,标准库再通过系统调用访问文件 非缓冲IO,直接通过系统调用访问文件,不经过标准库缓存 缓冲 直接和非直接IO的区别? 根据是否利用操作系统的缓存,把文件IO分为直接IO和非直接IO: 直接IO:不会发生内核缓存和用户程序之间的数据复制,而是直接通过文件系统访问磁盘 非直接IO:读操作时,数据从内核缓存中拷贝给用户程序, 非阻塞IO本质上还是同步IO,因为在执行read调用时,内核将数据拷贝到应用程序空间还是需要等待的,如果内核实现的拷贝效率不高,read调用会等待很长时间。 阻塞IO和非阻塞IO是同步IO么? 是。

    11020

    文件IO文件指针)

    有人总是以为所谓的文件指针就是一个指向文件的指针,其实文件指针是一种指向类型为FILE结构体的指针,只不过这个结构体内部包含了代表文件的描述符而已。 拓展: 文件指针是这么获取的: FILE *fp = fopen("example.txt", "r"); 其中,FILE结构体如下所示: ? 在上述结构体中,有个叫_fileno的核心成员,该成员就是由open()获得的文件描述符,可见标准IO函数fopen()本质上也是对系统IO的封装,它们的关系如下图所示: ?

    18720

    Python 文件IO

    不同模式打开文件的完全列表: 模式 描述 r 以只读方式打开文件文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。 如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。 如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 a 打开一个文件用于追加。 如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。

    22610

    Python 文件IO

    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。 文件指针将会放在文件的开头。 w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。 如果该文件不存在,创建新文件。 w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。 如果该文件不存在,创建新文件。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。

    22220

    IO文件)处理

    有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程: #1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 二、打开文件的方法 ① f = open('文件名' , '操作模式' , ‘编码格式’)  如: f = open('test.txt','r',encoding='utf-8') 注意:用这种方法打开文件 ='utf-8') as f: 注意:用这种方法打开文件,处理完后会自动关闭文件,但是处理的段落要进行缩进 三、操作文件的几种模式 ? 四、处理文件的几种方法 示例文件如下: ?  truncate() 此方法是截取文件,注意,是直接对原文件进行截取。

    457100

    Scala 文件 IO

    Scala 进行文件写操作,直接用的都是 java中 的 I/O 类 (java.io.File): import java.io._ object Test { def main(args: 实例如下: import scala.io._ object Test { def main(args: Array[String]) { print("请输入菜鸟教程官网 : " ) 从文件读取内容非常简单。 我们可以使用 Scala 的 Source 类及伴生对象来读取文件。 以下实例演示了从 "test.txt"(之前已创建过) 文件中读取内容: import scala.io.Source object Test { def main(args: Array[String

    27210

    Linux文件文件IO

    Linux文件分类: 普通文件:用户和OS的数据,程序等信息文件 目录文件:Linux文件系统将文件索引节点号和文件名同时保存在目录中,所以目录就是一张表。 OS可以修改目录文件,用户只能读目录文件 设备文件:Linux下一切皆文件,设备也是文件。每一种I/O设备对应一个设备文件,存放于/dev下。 -:表示普通文件 d:表示目录文件 l:表示链接文件 c:表示字符设备 b:表示块文件 p:表示管道文件 f:表示堆栈文件 接着看第一个符号后面的信息,注意到后面仍旧有9个字符。 Linux文件描述符 在Linux下当一个进程打开文件的时候,OS会返回相应的文件描述符,程序为了处理该文件必须使用这个文件描述符。文件描述符是一个正整数。 另外lseek的文件偏移量的大小可以大于当前文件的长度,在这种情形下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞。文件空洞并不要求在磁盘上占据空间。

    91120

    标准IO文件IO 的区别

    一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。 也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。 因此,Linux 下既可以使用标准I/O,也可以使用文件I/O)。 通过文件I/O读写文件时,每次操作都会执行相关系统调用。 这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。 文件I/O中用文件描述符表现一个打开的文件,可以访问不同类型的文件如普通文件、设备文件和管道文件等。而标准I/O中用FILE(流)表示一个打开的文件,通常只用来访问普通文件

    20410

    3(文件IO,不带缓冲的IO)

    失败则返回-1 第三个参数写成/*mode_t mode */ 表示这个参数仅在创建新文件时使用 Pathname表示要打开或者创建文件的名字 Oflag可用来说明此函数的多个选项。 下面的常量是可选的 O_APPEND 每次写时都追加到文件的尾端 O_CREAT 若此文件不存在则创建它,使用此项时需要第三个参数mode O_EXCL 可以测试文件是否存在,若不存在则创建 有可能在close和fcntl之间插入执行信号捕捉函数,它可能修改文件描述符 2.dup2和fcntl有某些不同的errno 8 延迟写 当数据写入文件时,先将数据复制到缓冲区中。 延迟写减少了磁盘读写,却降低了文件内容的更新速度次数,使得欲写到文件中的数据在一段时间内没写到磁盘上,如果系统发生故障,可能造成文件丢失 #include <unistd.h> int fsync(int ,将所有修改过的块缓冲,排入写队列,但是不等待写完成即返回;fsync只对文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束;fdatasync类似于fsync,但它只影响文件的数据部分

    33630

    文件io之——openclose

    如果文件已有内容,这次打开文件所写的数据附加到文件的末尾 而不覆盖原来的内容。 * O_CREAT 若此文件不存在则创建它。使用此选项时需要提供第三个参数mode,表示该 文件的访问权限。 注意open函数与C标准I/O库的fopen函数有些细微的区别: 以可写的方式fopen一个文件时,如果文件不存在会自动创建,而open一个文件时必须 明确指定O_CREAT才会创建文件,否则文件不存在就出错返回 以w或w+方式fopen一个文件时,如果文件已存在就截断为0字节,而open一个文件时必 须明确指定O_TRUNC才会截断文件,否则直接在原来的数据上改写。 例如,首先调用close关闭文件描述符1,然后调用open打开一个常规文件, 则一定会返回文件描述符1,这时候标准输出就不再是终端,而是一个常规文件了,再调用 printf就不会打印到屏幕上,而是写到这个文件中了 后面要讲的dup2函数提供了另外一种 办法在指定的文件描述符上打开文件

    7910

    Linux学习-文件IO

    文件系统 文件描述符 一个进程默认打开三个文件描述符 STDIN_FILENO 0 STDOUT_FILENO 1 STDERR_FILENO 2 新打开文件返回文件描述符表中未使用的最小文件描述符 const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 返回值:成功返回新分配的文件描述符

    15130

    Java 文件 IO 操作

    File类 File 类 是 java.io 包中唯一代表磁盘文件本身的对象 File(String dirPath) 构造生成 File 对象 import java.io.File; class RandomAccessFile类 随机跳转到文件的任意位置处读写数据,该类仅限于操作文件 import java.io.File; import java.io.RandomAccessFile; import 流的子类 进行字节、字符的读写操作 关闭文件流 3.1 字节流 import java.io.*; class IoDemo { public static void main(String ; import java.io.PipedInputStream; import java.io.PipedOutputStream; class Sender extends Thread{ 字符编码 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream

    15930

    Linux文件IO操作

    文件操作 在进行 Linux 文件操作之前,我们先简单了解一下 Linux 文件系统 Linux文件类型 Linux中文件类型分为以下这几种: 符号 文件类型 - 普通文件 d 目录文件,d是directory character的文件 s 套接字文件,这种文件类型用于进程间的网络通信 p 管道文件,这种文件类型用于进程间的通信 怎么判断文件类型? Linux文件权限 文件权限是文件的访问控制权限,那些用户和组群可以访问文件以及可以执行什么操作 查看文件权限 查看文件权限 文件类型后面紧跟着的就是文件权限 简单介绍下文件权限,如下图所示: 因为 /main open: No such file or directory 系统IO函数 UNIX环境下的C对二进制流文件的读写有两种体系: fopen,fread,fwrite ; open, read /main file len:4 linux下的标准输入/输出/错误 在文件IO操作里面一直讲到文件描述符,那我就不得不提一下linux中的标准输入/输出/错误 在C语言的学习过程中我们经常看到的stdin

    21230

    Python文件IO操作

    文件IO常用操作: open 打开 read 读取 write 写入 close 关闭 readline 行读取 readlines 多行读取 seek 文件指针操作 tell 指针位置 ---- 打开操作 ,返回一个文件对象(流对象)和文件描述符。 w   表示只写方式打开,如果读取则抛出异常;   如果文件不存在,则直接创建文件;   如果文件存在,则清空文件内容;   x   文件不存在,创建文件,并只写方式打开;   文件存在,抛出FileExistsError 如果是二进制模式,使用io.DEFAULT_BUFFER_SIZE值,默认是4096或8192。 如果是文本模式,如果是终端设备,是行缓存方式,如果不是,则使用二进制模式的策略。   flush() 将缓冲区数据写入磁盘(其实是磁盘的缓冲区);   close()关闭前会调用flush() import io print(io.DEFAULT_BUFFER_SIZE) ---- encoding

    24820

    Java - IO 文件操作

    Java - IO 文件操作 基本操作 若是要对文件以及文件内容进行操作,应该使用的是:java.Io 包 Java.IO包:(5+1 核心) File类 InputStream类 OutputStream 类 Reader类 Writer类 Serializable接口 File类(文件本身的操作) 在java.IO包中,File 类是唯一一个与文件本身操作有关的类,但是不涉及到文件的具体内容。 : 一、通过File类定义文件的路径 二、通过字节流或字符流的子类对象为父类对象实例化 三、进行数据读/写(输入/输出)操作 四、数据流属于资源操作,资源操作 必须关闭 java.IO java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream ; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class

    21020

    文件IO常用操作

    Out[2]: <_io.TextIOWrapper ,如果读取则会抛出异常;如果文件不存则则直接创建文件;如果文件存在,则清空文件内容。 wxa都可以产生新的文件,w模式不管文件存在与否,都会生成全新内容的文件;a模式不管文件是否存在,都能在打开的文件尾部追加;x必须要求文件事先不存在,自己会创建一个新的。 Out[31]: <_io.TextIOWrapper Out[34]: <_io.BufferedReader

    28231

    Linux文件IO函数

    在Linux下当一个进程打开文件的时候,OS会返回相应的文件描述符,程序为了处理该文件必须使用这个文件描述符。 这3个文件对应的文件描述符分别是0,1,2.通常使用宏:STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO.文件描述符是一个索引,指向内核中打开文件的记录表。 如果进程是文件所有者执行的,那么对文件的权限取决于第一组的权限;如果进程是文件所有者所在组或者附属组之一,那么对文件的权限取决于第二组权限。若进程是其他用户执行的,那么对文件的操作取决于第三组权限。 关闭一个文件并释放该进程加在该文件上的所有锁。当一个进程终止的时候,会自动关闭它打开的所有文件。所以有时候并不显式的使用close关闭文件。close函数返回0表示成功,返回-1表示错误。 lseek不可以用于管道,FIFO,socket文件。另外lseek的文件偏移量的大小可以大于当前文件的长度,在这种情形下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞。

    83670

    扫码关注腾讯云开发者

    领取腾讯云代金券