首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Linux】Linux文件IO常规操作

前言 Linux 文件 IO 操作指的是在 Linux 系统上对文件进行读取和写入的操作。它是通过与文件系统交互来读取和写入文件中的数据。...在 Linux 中,文件被视为一系列字节的有序集合,每个文件都有一个相关联的文件描述符,用于标识该文件的唯一标识符。文件 IO 操作允许程序从文件读取数据或将数据写入文件。...S_IWUSR:用户可写权限 返回值: 成功: 打开文件所得到对应的文件标识符(整数) 失败: -1 设置errno int open(char *pathname, int flags mode_t...= mode & ~umask 返回值: 成功: 打开文件所得到对应的文件标识符(整数) 失败: -1 设置errno 1 #include 2 #include<fcntl.h...函数 int close(int fd); 错误处理函数: 与errno相关 printf("xxx error: %s\n",errno); read函数 ssize_t read(int fd,

28950

系统编程-简洁而不简单的文件操作

来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 我们都听过Linux下一切皆文件,实际上无论是普通的文件读写,还是网络IO读写,它们都有着类似的操作过程。...本文通过基本文件IO操作,来了解Linux“一切文件”的读写。当然过程中穿插着很多其他内容。 文件I/O过程 在介绍具体的函数使用之前,我必须说明一下文件I/O的基本过程。...关闭文件 调用close函数即可,它的参数是前面打开的时候获得的文件描述符 #include int close(int fd); 成功返回0,失败则返回-1,并且会设置errno...还记得在《不可不知的三种缓冲》中说的吗?标准错误通常是不带缓冲的。 打开一个文件,不存在时创建 既然不存在时,会打开失败,那么不存在就创建好了,这就用到了O_CREATE标志。...错误处理原则: 返回-1,则出错,会设置errno,可通过perror或者strerror打印错误信息。

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

    Python 完美诠释高内聚概念的 IO 流 API 体系结构设计

    而 Python 的 IO 流操作,才真正应了哪句话:人生苦短,我学 python 。...如果没有指定 buffering 参数,则会提供默认缓冲策略: 二进制文件使用固定大小的缓冲块。 在许多系统上,缓冲区的长度通常为 4096 或 8192 字节。 0: 在二进制模式下关闭缓冲。...:", file.writable()) print("缓存方案", file.buffer) print("文件默认编码:", file.encoding) print("编程错误处理方案", file.errors...'> 文件默认编码: cp936 编程错误处理方案 strict 是否设置行缓存 False 换行符的设置方案 None ''' cp936 指的是系统的第 936 号编码方案,即 GBK 编码。...= file.readlines() print(res) file.close() ''' 输出结果 -----------把文件中数据以行为单位存储在列表中--------- ['You hide

    57710

    Linux文件IO基础

    Linux 文件 I/O(Input/Output)基础是 Linux 应用程序开发中的重要组成部分。在 Linux 系统中,文件 I/O 涉及到文件的读取和写入,以及文件描述符、系统调用等概念。...以下是 Linux 文件 I/O 的基础知识: 1. 文件描述符 在 Linux 中,每个打开的文件都与一个文件描述符相关联。文件描述符是一个非负整数,表示进程中打开文件的引用。...移动文件指针 lseek 系统调用用于在文件中移动文件指针的位置。它接受文件描述符、偏移量和移动的位置(例如 SEEK_SET、SEEK_CUR、SEEK_END)作为参数。...文件 I/O 错误处理 在进行文件 I/O 操作时,需要进行错误处理以处理可能发生的错误。...通常,系统调用的返回值为 -1 表示发生了错误,此时可以使用全局变量 errno 获取错误码,并使用 perror 函数输出错误信息。

    15810

    第七章 错误处理和资源管理

    这就是资源管理与错误处理考虑的一个原因 一. defer 1. defer保证在函数结束时发生. 2. defer列表为先进后出 3. 参数在defer语句时计算....错误处理 所谓的错误处理, 就是处理已知的错误, 不要抛出panic这样导致系统挂掉的错误发生....统一错误处理的逻辑 下面模拟一个web服务器, 在浏览器地址栏输入文件的url, 然后显示文件的内容....在url上输入一个地址, 然后显示文件内容 // 做一个显示文件的web server func main() { http.HandleFunc("/list/", func(writer http.ResponseWriter...异常也是可以封装的. 最后再来梳理这个小案例. 1. 我们有一个想法, 模拟web请求, 在浏览器url上输入一个文件路径, 打印文件的内容 2. 内容可能有错误, 进行异常处理. 3.

    44810

    高级IO之非阻塞IO和阻塞IO

    在 Linux 中,非阻塞 I/O 可以通过设置文件描述符(File Descriptor)为非阻塞模式来实现。...} else if (ready == 0) { // 超时,没有数据可读 } else { // 文件描述符 `fd` 上有数据可读 } 这些函数和方法允许在进行 I/O 操作时检查文件描述符的状态...编程难度提高: 编写使用非阻塞 I/O 的程序可能会更加复杂,需要考虑状态管理、错误处理等方面的问题。 部分系统不支持: 有些系统对非阻塞 I/O 的支持不完整,可能需要特殊的操作系统或硬件支持。...== -1) { // 处理读取错误 } else { // 处理读取成功的数据 } 如果文件描述符 fd 上没有可用的数据,read 操作将阻塞等待,直到有数据可读或发生错误。...} else { // 处理写入成功 } 如果文件描述符 fd 上的写入缓冲区已满,write 操作将阻塞等待,直到有空间可用或发生错误。

    29510

    socketpair原理_socket方法

    先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。...之所以子进程能读取父进程的string,是因为fork时,子进程继承了父进程的文件描述符的,同时也就得到了一个和父进程指向相同文件表项的指针;若父子进程均不关闭读端,因为指向相同的文件表项,这两个进程就有了竞争关系...我想不明白,为什么这时候父进程不能读取数据呢。 而上一种情况,父进程先读取数据,子进程仍然可以读取数据(数据为空),但子进程不会阻塞在read上。...0,因为子进程中还持有一个引用,所以写端健在,子进程被唤醒之后不会读到EOF返回,而是阻塞在读操作上 最后,有关socketpair在内核中实现的一点点描述: socketpair会创建两个描述符,但改描述符不属于任何的实际文件系统...有了这个基础,即可明白为什么试用fork产生的两个子进程都不关闭读端的时候会竞争,如上所述,他们共享相同的文件表项,有相同的inode和偏移量,两个进程的操作当然是相互影响的.

    92820

    【Linux】vscode的使用 | 进程间通信(简单概括)

    CTRL ~ 即可 打出在Linux内部内置的命令行 ---- 可以在vscode上运行可执行程序 3....通过父子进程理解管道 在vscode中 点击新建文件夹,即可创建目录 pipe ---- 在目录pipe上 点击右键 新建文件 ,即可 生成 pipe.cc(cc结尾代表cpp) 的文件 1....---- pipe的参数是一个数组,实际上传入的是数组首元素的地址 若返回值小于0,则通过errno(出错码)来得到出错结果 strerror 将错误码转换成错误码描述的 ---- 最终发现打印出来的结果...为 3 与 4 ,正好对应 数组中下标 3与4的位置 系统调用为什么可以使用c语言的errno 正常来说,是调用c语言接口出错了,才调用的errno 或者 strerror的 为什么调用系统调用接口时...,也会使用 errno来说明错误的原因 系统调用接口是由系统使用c语言的一套软件 2.创建子进程以及通信 关闭不需要的fd,让父进程进行读取,让子进程进行写入 一般认为pipefd[0] 为读端 ,

    88840

    【计算机网络】TCP协议详解

    通过滑动窗口机制进行流量控制,确保发送方的发送速率不超过接收方的接收能力 错误处理 如果数据报在传输过程中出错,则丢弃该数据报,由上层协议负责错误处理 通过确认和重传机制来处理错误,确保数据的正确传输...失败时,返回-1,并设置errno以指示错误原因。常见的错误码包括EADDRINUSE(端口已被占用)、EINVAL(socket未绑定地址)、ENOTSOCK(不是一个socket文件描述符)等。...四、返回值 成功时,accept函数返回一个新的套接字文件描述符,该描述符用于与连接的客户端进行通信。 失败时,返回-1,并设置errno以指示错误原因。...例如,如果尝试在一个非套接字文件描述符上调用listen,或者指定的backlog值过大导致系统资源不足,listen函数将返回错误。...这意味着守护进程不会接收任何输入,其输出和错误也不会显示在终端或任何文件中。 三、返回值 成功时,daemon函数返回0。 失败时,返回-1,并设置errno以指示错误原因。

    24610

    初识Linux · 匿名管道

    << std::endl; } return 0; } 我们思考一个现象,为什么父子进程默认的都是打印在了1上?...为什么这里我们能得出的结论是子进程能继承父进程的文件描述符表,为了实现单向的管道通信我们需要关闭文件描述符。 理解是什么?...而为什么管道叫做匿名管道是因为我们得到该文件描述符甚至不需要文件名,不需要文件路径,所以叫做匿名管道。...由前文的是什么为什么,我们知道了基本操作是需要我们创建管道,使用pipe函数,开辟好管道之后,我们需要手动将两个文件描述符关闭,因为子进程会继承父进程的文件描述符表,所以对于父进程来说我们同样需要关闭对应的文件描述符表...,使用到的是前面学习到的errno和strerror,一个是错误码,一个是错误码对应的字符串,然后打印出来0 1对应的文件描述符,就算是管道创建成功了。

    7910

    记一次传递文件句柄引发的血案

    apue 上讲 Solaris 系统是可以在进程间通过 STREAMS 管道传递文件句柄的。...书上讲道:“在技术上,发送进程实际上向接收进程传送一个指向一打开文件表项的指针,该指针被分配存放在接收进程的第一个可用描述符项中。”...但是在 server 端等待接收文件句柄时却发生了错误,这是怎么回事? 查了一下错误码 2,为ENOENT,没有对应的文件或目录。...这一圈下来可以更好的体会一下传递文件句柄与传递文件名再打开文件效果的区别, 前者共享了之前进程的文件句柄相关的信息(例如文件偏移量),也是我的代码出问题的原因。...后记:在 linux 上,虽然没有 STREAMS 系统可用,依然可以借助其它方式来传递文件句柄, 这就是 Unix 域套接字、和基于其上的 sendmsg/recvmsg、 来收发 SCM_RIGHTS

    50320

    C语言文件操作:标准库与系统调用实践

    在写入二进制文件时,使用 "wb" 模式打开文件是很重要的,其中 "b" 表示二进制模式。这可以防止在某些操作系统(如 Windows)上对换行符进行不必要的转换。...如果 fwrite 返回的值小于 nmemb,你应该检查 errno 来确定是否发生了错误,并采取相应的错误处理措施。...这个值可能小于 nmemb,如果到达了文件末尾或发生了其他读取错误(尽管对于普通的文件读取操作,fread 通常要么成功读取所有请求的数据项,要么在遇到文件末尾时返回实际读取的项数,要么在发生不可恢复的错误时返回...在 C 语言编程中,它通常通过 头文件声明,并用于返回一个文件描述符,该描述符用于后续的文件操作,如读取、写入和文件定位。...返回值 成功时,open 返回一个非负的文件描述符。 失败时,返回 -1,并设置全局变量 errno 以指示错误类型。

    7810

    UNIX(多线程):01---线程简介及线程限制

    每个线程在进行事件处理时可以采用同步编程模式,同步编程模式要比异步编程模式简单得多 同一进程多个线程可以自动的共享相同的存储地址空间和文件描述符 有些问题可以分解从而提高整个程序的吞吐量。...但是即使程序运行在单处理器上,也能得到多线程编程模型的好处。处理器的数量并不影响程序结构,所以不管处理器的个数多少,程序都可以通过使用线程得以简化。...而且,即使多线程程序在串行化任务时不得不阻塞,由于某些线程在阻塞时还有另一些线程可以运行,所以多线程在单处理器上运行还是可以改善响应时间和吞吐量 每个线程都含有表示执行环境所必须的信息:其中包括进程中标识线程的线程...ID, 一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据 一个进程的所有信息对该进程的所有线程都是共享的:包括可执行代码、程序的全局内核和堆内存、栈以及文件描述符,因为它们共享同一存储区...备注(总结): 不同线程中自己定义的数据,其他线程不能直接访问,是相互独立的 只有全局变量,所有线程才能直接访问 四、线程的错误处理 因为pthread_xxx系列函数在调用失败时并不设置errno

    80830

    Rust FFI 编程 - nix crate

    ,相对于 libc 库 暴露的 unsafe API,它具有两个特点: 用户代码中尽量没有 unsafe Rust 风格的错误处理 以系统调用 gethostname 为例,我们来看一下,libc 和...errno, nix 库中处理各种类 Unix 系统的错误类型,对于 FreeBSD,IOS,MacOS 系统直接封装的 libc 库中的。...poll,在特点文件描述符上触发 wait 事件。 pty,创建主从虚拟伪终端 PTYs。 sched,提供 Linux 系统的调度接口。...我们知道fork()函数如果执行成功,则向子进程返回 0,并将子进程的进程 ID 返回给父进程。否则,将向父进程返回 -1,不创建子进程,并设置errno来标识错误。...我们来看 nix 库中的fork()函数,其返回值为ResultErrno>类型,相比 C 语言中的fork()函数,它有两个优点: Rust的错误处理风格,使用类型Result

    1.7K20

    【计算机网络】高级IO模型

    IO 多路转接 IO 多路转接,虽然从流程图上看起来和阻塞 IO 类似,实际上最核心在于 IO 多路转接能够同时等待多个文件描述符的就绪状态。 5. 异步 IO 由内核在数据拷贝完成时,通知应用程序。...在等待的时候可以做其他事情,也就是它们之间等的方式不一样,非阻塞IO在进行非阻塞轮询时可以做自己其它的事情,所以这就导致非阻塞IO在效率上稍微高一点。...同步通信和异步通信 同步和异步关注的是消息通信机制。 所谓同步IO,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。...我们知道,文件描述符就是一个数组下标,而我们所有的网络通信、文件等等,都是读写文件描述符,而每一个文件描述符指向的都是内核中的文件对象,文件对象是有关于这个文件的 flags 的,也就是它的标记位。...所以我们可以通过 fcntl() 接口来直接设置一个文件描述符的属性!其实就是设置其文件对象中的 flags 标志位,告诉内核这个指定的文件描述符要以非阻塞的方式来操作。

    10810

    【Linux系统调用API】一、open与close函数

    一、系统API与C库函数的调用关系 当我们在C语言程序中调用一个库函数的时候,比如调用printf()函数,实际上它是通过文件指针来指向要打印的位置的。...在文件在文件指针中,包含了一个文件描述符,这个文件描述符用于指定目标文件,默认情况下就是STDOUT_FILENO也就是标准输出1号描述符;f_pos指定了读写的位置,比如我们打印的时候他会不停的在上一次打印的末尾位置打印后面的内容...,就是通过这个位置去实现的;在最后还有一个缓冲区buffer,那么为什么要有buffer缓冲区呢,其实这是为了提高读写的效率,把读写的内容先放到缓冲区,这样就可以实现一次读写更多的内容。...实际上,在Linux下启动一个进程,就会默认打开三个文件描述符:0标准输入、1标准输出、2标准错误。它们分别对应C语言中的stdin、stdout、stderr。...当我们每次打开一个文件,就会分配给这个文件一个当前空闲的最小文件描述符,如果此时标准输入0、标准输出1、标准错误2空闲,那么也会把这个文件描述符分配给新打开的文件但是这三个文件描述符0、1、2与stdin

    19410

    Go语言中的错误处理机制

    Go语言中的错误处理方法1. 基本错误处理在Go语言中,错误处理主要通过内置的error接口实现。...使用defer关键字释放资源在涉及资源管理的操作中,如打开文件、数据库连接等,使用defer关键字确保资源在错误发生时也能正确释放。...= nil {fmt.Println("Error:", err)}}高级错误处理技术1. 全局错误处理在某些情况下,我们需要对程序中的所有错误进行统一处理。...中断错误处理链在一些复杂的系统中,错误处理链可能非常复杂。在这种情况下,可以通过定义一个中断错误处理链的机制,确保关键错误能够被优先处理。...读取配置文件并处理错误下面是一个读取配置文件的完整示例,展示如何处理文件不存在、解析错误等不同类型的错误。

    12400

    Linux多路复用Select()与poll()函数

    提出问题 在Linux编程中,一切皆文件,往往是对一个文件进行操作,比如说串口,和传感器打交道,一般情况下就是一来一去,一收一发,但是,如果我有多个传感器,而传感器之间又有关联,我想同时监控一个或者多个以上的文件描述符...(注:错误并不是意外状态) 9timeout: NULL指针代表无限等待,否则是指向timeval结构的指针,代表最长等待时间。...接着应该用FD_ISSET宏来查找返回的文件描述符组。 select()函数的接口主要是建立在一种叫'fd_set'类型的基础上。它('fd_set')是一组文件描述符(fd)的集合。...[在Linux中,timeout指的是程序在非sleep状态中度过的时间,而不是实际上过去的时间,这就会引起和非Linux平台移植上的时间不等问题。...如发现返回为负则应该立即查看errno,因为这代表有错误发生。 如果没有事件发生,revents会被清空,所以你不必多此一举。 poll函数可用的测试值 ?

    2.7K40

    NodeJS错误处理最佳实践

    NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管。...包括为什么出错,错误背后的原因。之后会提及,但是关键在于错误处理的粒度要细,因为哪里出错和为什么出错决定了影响大小和对策。 你可能会发现在栈的某几层不断地处理相同的错误。...对于一个给定的错误,你可以做这些事情: 直接处理。有的时候该做什么很清楚。如果你在尝试打开日志文件的时候得到了一个ENOENT错误,很有可能你是第一次打开这个文件,你要做的就是首先创建它。...如果你用光了所有的文件描述符或者没有访问配置文件的权限,这种情况下你什么都做不了,只能等某个用户登录系统把东西修好。 记录错误,其他什么都不做。...一般情况下NodeJS 会在一个空闲的套接字上应用两分钟的超时,但这个值可以覆盖,这将会泄露一个文件描述符。如果这种情况不断发生,程序会因为用光了所有的文件描述符而强退。

    1.5K41
    领券