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

Linux文件IO编程

Linux 中,用户程序不能直接访问内核提供服务,必须通过系统调用来使用内核提供服务。...Linux用户编程接口(API)遵循了 UNIX 中最流行应用编程界面标准—— POSIX。这些系统调用编程接口主要是通过 C 库(libc)实现。...往期传送门: 史上最全Linux常用命令汇总(超详细!...超全面)收藏这一篇就够了 Linux下标准IO这些操作你清楚吗(内附有详细介绍和例程) 文章目录 文件I/O简介 文件描述符 文件I/O与标准I/O区别 打开文件(open) 关闭文件(close...文件描述符是一个非负整数,Linux为程序中每个打开文件分配一个文件描述符 文件描述符从0开始分配,依次递增 文件IO操作通过文件描述符完成 注意:每个程序中打开文件系统会单独分配文件描述符,互相不影响

2.4K10

Linux编程--文件操作

如果在flags中存在O_CREAT标志位,则当文件不存在时,会创建文件,并且根据mode参数来决定该文件访问权限 参数: pathname:文件路径 flags:打开方式掩码 mode:创建文件访问权限...向fd对应文件将bufferd数据写入最多count个字节数据,当读写入文件buffer比count要小的话,最多写入buffer个字节数据。...open中mode 下面三组Mode代表着创建文件文件权限,它们和umask共同组成了这个文件权限。以|分隔开分别是User/Group/Other三个组对应权限掩码。...2.当lseek位置比文件长度还要大时候,就会出现文件空洞。某些操作系统中文件空洞是会占用磁盘空间,大部分不会。...进程与文件表、i-node表关系 上图画出了fd与对应文件i-node之间关系 多进程中文件描述符可能指向同一个文件 同进程中不同文件描述符可能指向同一个文件 多个不同偏移量文件指针可能指向同一个文件

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

Linux内核编程--常见文件操作

fd2); /*把一个文件旧描述符复制到一个新描述符上*/ 函数执行后,返回文件描述符与原有的旧文件描述符共用同一个文件表项,但是文件描述符标志将被清除,进程调用exec时文件描述符将不会被关闭...st_mode: stat函数和lstat函数区别:假设有一个文件快捷方式(windows系统),lstat只分析快捷方式信息,而stat分析是快捷方式对应文件信息。...linux系统中”快捷方式“被称为软链接。...有了umask对默认权限设置,当创建一个文件后,新文件默认权限就是最大权限减去 umask 指定权限。...文件权限在Linux表示: [root@VM-4-13-centos cpp_learning]# ls -l hello.txt -rw-r--r-- 1 root root 12 Apr 13

2K40

Linux编程--文件原子操作

当多个进程同时访问一个文件时候,普通write/read在执行时候,无法保证操作原子性,可能会导致文件被污染,达不到预期结果。...PS: pread是无法中断原子操作,无法中断它定位和读取操作 pread读取过后文件偏移量不会发生改变 同理pwrite也是一样 而在文件创建时候也是一样,当需要做文件创建同步时候,...int dup2(int filedes,int filedes2): 传入文件描述符,以及新文件描述符,如果新文件描述符所指向文件已经打开,则会强行将其关闭后,将该文件描述符指向到已存在文件描述符...如果filedes和filedes2指向同一个文件,则不做任何处理,直接返回filedes2,不会关闭文件 新返回回来filedes2会共享filedes文件状态标识,文件偏移量等等信息。...因为它们文件指针会指向文件同一个位置。只是fd不一样而已。

2K30

Linux编程文件描述符)

Linux编程世界中,不可能没听过文件描述符这个概念,我们操纵任何设备时候,几乎都要通过它来达成,它究竟是何方神圣呢?随我描述符科学家来一探究竟。...首先,我们在Linux下打开文件都是如下代码: int fd = open(... ...); 当然有同学可能会说,有时也可以用fopen(),但是fopen()只是标准IO对系统IO封装,归根结底还是使用...open()来打开一个文件。...很多人就想当然地以为打开嘛,就跟在windows下双击一个文件,或者双击一个文件夹一样,就是一个动作而已,其实不然,常说打开一个文件实际上最重要是获取这个文件描述符,描述符是用来表征这个文件代表物...内核空间中有一堆数据结构表达一个文件属性信息,但是用户空间看不见,只看见一个代表了这些信息整数i,通常我们称之为文件描述符,对文件读写和ioctl操作都是通过这个东东来达到呢!

1.7K20

Linux内核编程--文件描述符

Linux操作系统中,一切皆是文件—— "Everything is a file"。 如果要在Linux系统中编写操作文件代码,需要借助文件描述符。...文件描述符就是内核为了高效管理已被打开文件所创建索引值。 文件描述符指向内核为每一个进程维护打开文件记录表。当要处理文件时,将文件对应文件描述符作为参数传给函数。...文件描述符在用户进程和内核之间映射关系: Linux中查看文件描述符指令:lsof(list open files) lsof可以打开文件: 普通文件 目录 网络文件系统文件 字符或设备文件...其在打开或者创建文件时可以指定文件属性及用户权限等各种参数。...nbyte: 期待读取数据最大字节数 return: 文件实际读取字节数,非负整数是成功,-1是失败 4.lseek() 在每个打开文件中都有一个文件偏移量,文件偏移量会根据文件读写而改变位置

2.7K10

温故Linux后端编程(一):文件IO

文章目录 Linux文件 文件描述符 文件I/O操作 打开/创建文件 关闭文件 读取/写入文件 文件指针偏移 测试代码示例 ---- Linux文件 引用一句经典的话:“UNIX下一切皆文件...文件描述符 在Linux下用文件描述符来表示普通文件和设备文件文件描述符是一个整型数据,所有对文件操作都通过文件描述符完成。...文件描述符是文件系统中连接用户和内核空间枢纽,当打开和创建一个文件时候,内核空间会创建相应结构,并生成一个整型变量传递给用户空间对应进程。进程通过这个文件描述符对文件进行操作。...在Linux系统中有三个已经被分配文件描述符,分别是: 0 STDIN_FILENO 标准输入流 1 STDOUT_FILENO 标准输出流 2 STDERR_FILENO 标准错误流 这三个文件描述符和它们各自功能是绑死...---- 文件I/O操作 打开/创建文件Linux下,用open函数可以用来打开或创建一个文件: #include #include #include

64720

linux系统编程文件与IO(二):文件读取写入

一、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()发生在这一位置。

2.5K60

Linux编程--解决头文件`redefine of struct xxx`

问题 在写头文件时候,将结构体定义在头文件中 #include #include ... struct ELF_FILE { ELF_Addr...included multiple times, additional include site here redefinition of 'ELF_FILE' 但是在检查后发现,并没有出现include多次头文件...,也只有这一个定义ELF_FILE结构体地方 原因 在使用#include 时候,编译器会在预处理阶段,将头文件以及定义宏铺开在所使用C文件中。...如果没有使用条件编译的话,如果出现重复引用,以及循环递归使用include时候,就会在对应C文件中展开重复定义代码。...解决办法 加入条件编译,在头文件头和尾加上条件编译即可 #ifndef SOTEST_ELF_HOOK_H #define SOTEST_ELF_TYPE_DEF_H #include <linux

4.5K20

linux系统编程文件与IO(一):文件打开关闭

一、文件描述符 对于Linux而言,所有对设备或文件操作都是通过文件描述符进行。当打开或者创建一个文件时候,内核向进程返回一个文件描述符(非负整数)。...后续对文件操作只需通过该文件描述符,内核记录有关这个打开文件信息(file结构体)。...(绝对和相对)路径 flags:文件打开模式 mode:  用来规定对该文件所有者,文件用户组及系 统中其他用户访问权限 返回值: 打开成功,返回文件描述符;打开失败,返回-1 打开文件方式...: O_RDONLY 打开一个供读取文件 O_WRONLY 打开一个供写入文件 O_RDWR 打开一个可供读写文件 O_APPEND 写入所有数据将被追加到文件末尾 O_CREAT 打开文件...需要说明是,在linux系统编程中使用一些系统调用函数一般如果失败返回-1且会置全局变量errno为特定错误码,可以使用perror打印,或者通过strerror(errno)打印错误提示。

1.6K90

Linux内核编程--文件流与缓冲区

Linux系统下,通过编程文件进行操作方式有两种机制:文件描述符和文件流 1.文件描述符和文件区别: 文件描述符类型为int,文件类型为FILE*(文件指针)。...文件描述符操作更底层,文件操作更高级且更丰富。...对于一个文件,如果涉及到格式化输入/输出,以及面向字符或行输入/输出,更推荐使用文件流进行操作。...2.文件定向设置 文件定向决定了一个I/O操作一次能操作多少个字节,是单字节(字节定向)还是多字节(宽定向)。...常用open函数--fopen()/freopen()/fdopen() fopen():打开路径名为pathname指定文件 freopen():在一个指定流上打开文件

2.8K10

linux系统编程文件与IO(三):目录操作

-1 mkdir常犯错误是认为权限为0666和文件相同,通常来说目录是 需要可执行权限,不然我们不能够在下面创建目录。...功能说明:删除一个空目录 原型:int  rmdir(char *pathname); 返回值:调用成功返回0,失败返回-1 功能说明:用来改变给定路径名pathname文件权限位 原型...char *pathname, mode_t mode); int  fchmod (int  fd, mode_t mode); 返回值:调用成功返回0,失败返回-1 功能说明:用来改变文件所有者识别号...", 1) == 0)             continue; //忽略隐藏文件         printf("%s\n", de->d_name);     }     closedir(dir...);     exit(EXIT_SUCCESS); // 等价于return 0 } 以上程序将当前目录文件名进行输出,类似 ls 功能,忽略隐藏文件

81550

linux udp编程_linux中socket编程

在前面的文件中,我们介绍了linux网络编程中与IP相关知识和常用函数总结,本文针对具体UDP通信,来详细介绍UDP通信使用,包括UDP通信中点对点通信,多播,广播等。...一、UDP通信中服务端和客户端基本编程框架 与TCP相比较,UDP是面向无连接通信方式,不需要connect、listen、accept等函数操作,不用维护TCP连接、断开等状态。...addr中信息,确实一个错误IP信息或者0.0.0.0这样地址信息,这是什么原因呢,在那个男人描述,有如下一段话 总结来说,就是我们必须初始化addr_size长度,如果设置长度比...3.2、组播使用 组播在基本UDP编程框架基础上,使用setsockopt()函数和getsockopt()函数来实现,需要设置IP层相关参数(第二个参数为 IPPROTO_IP),其原型如下:...:加入或者退出一个组播组其参数为一个结构体 使用组播一个基本编程流程如下: 3.3 使用组播服务端和客户端例子 (TBD) 三、UDP中广播使用 UDP广播与普通UDP通信区别不是很大,如果需要发送广播消息时

11K10

linux socket udp编程_linux网络编程socket

大家好,又见面了,我是你们朋友全栈君。 文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。...提示:以下是本篇文章正文内容,下面案例可供参考 一、UDP是什么 UDP是一种不可靠、无连接、数据报服务。...并且,如果用户没有指定足够应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。 因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送数据,不然就会造成数据丢失。...二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

9.8K20
领券