关键词:
前言
本文将为大家介绍基础IO的相关知识,让我一起来学习吧。
一,复习C语言当中学习的文件接口操作
FILE *fopen(const char *path,const char *mode);
path:待要打开的文件
mode:以何种方式打开
r:可读方式打开
r+:可读可写方式打开
w:可写方式打开
w+:可读可写方式打开,如果文件不存在,则创建文件。如果是打开了一个已经存在的文件,则截断文件(清空文件内容)
a:追加写,但是不可以读。如果文件不存在则创建文件,如果文件存在,则在文件的末尾开始追加写。
a+:追加写,可以读。如果文件不存在则创建文件,如果文件存在,则在文件的末尾开始追加写。
返回值:
成功:返回文件流指针FILE
失败,则返回NULL
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
ptr:将从文件读到的内容保存在ptr指向的空间当中
size:定义读文件时,一个块的大小,单位为字节
nmemb:期望可以从文件中读多少块
stream:文件流指针
返回值:
返回的是真正读取到块的个数
常见用法:将一块的大小定义为1字节,nmemeb就可以代表我们期望读多少字节,返回的含义,也是读到了多少字节。
size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
ptr:想往文件中写什么内容
size:定义往文件中写的块的大小,单位为字节
nmemb:期望写多少块
stream:文件流指针
返回值:
返回成功:写入到文件当中块的个数
常见用法:将一块的大小定义为1字节,nmemeb就可以代表我们想写多少字节,返回值为成功写入的字节数量
int fseek(FILE *stream,long offset,int whence);
stream:文件流指针
offset:偏移量
whence:将文件流指针偏移到什么位置
SEEK_SET:定义文件流指针到文件头部
SEEK_CUR:定义文件流指针到当前位置
SEEK_END:定义文件流指针到文件末尾
作用:移动文件流指针指向的位置
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
系统调用的文件操作接口:
打开的文件存在,则使用下面的接口
int open(const char *pathname,int flags,mode_t mode);
pathname:待要打开的文件
flags:以何种方式打开,有且只能存在一种,并且必须有
0_RDONLY:只读方式
0_WRONLY:只写方式
0_RDWR:读写方式
可选项:
0_TRUNC:截断文件(清空文件内容)
0_CREAT:文件不存在则创建文件
0_APPEND:追加的方式
0_EXCL | 0_CREAT : 如果文件存在,则打开文件失败
使用按位或的方式进行组合
0_RDWR | 0_CREAT | 0_APPEND
本质上内核是使用位图的方式来表示每一种方式的
mode:当创建或打开一个新文件时,则需要给文件设置权限,设置权限的时候,则传递一个8进制的数字就可以了
返回值:
成功:返回一个文件描述符
失败:返回-1
ssize_t read(int fd,void *buf,size_t count);
fd:文件描述符
buf:将文件内容读到buf指向的空间当中
count:期望读多少字节
返回值:
返回读到的字节数量
ssize_t write(int fd,const void *buf,size_t count);
fd:文件描述符
buf:将buf指向的内容写到文件中去
count:期望写多少字节
返回值:
返回写入的字节数量
off_t lseek(int fd,off_t offset,int whence);
fd:文件描述符
offset:偏移量
whence:
SEEK_SET:定义文件流指针到文件头部
SEEK_CUR:定义文件流指针到当前位置
SEEK_END:定义文件流指针到文件末尾
二,文件描述符
文件描述符本质上就是一个整数,是一个从0开始的整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件,于是就有了file结构体,表示一个已经打开的文件对象。而进程执行open系统调用,所以必须让进程和文件关联起来。每一个进程都有一个指针*files,指向一张表files_struct,该表最重要的部分就是包涵一个指针数组,每个元素都是一个指向打开文件的指针。所以,本质上,文件描述符就是files_struct包含数组的下标。所以只要拿着文件描述符,就能找到对应的文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhG2jUVA-1628669830113)(https://i.loli.net/2021/08/11/1EstfVcWAJFpYjN.png)]
默认的三个文件描述符:标准输入0,标准输出1,标准错误2。一个文件流指针只能保存一个文件描述符。
三,静态库和动态库
静态库和动态库都是程序代码的集合,将代码集合封装在了库文件当中,提供给调用者使用:
动态库:
特征:
win : 后缀为 .dll
linux : 前缀 : lib 后缀为: .so
生成:
使用gcc/g++编译命令,需要用到两个命令行参数
—fPIC : 产生位置无关的代码
—shared : 产生共享库
使用:
gcc/g++的命令行参数:
-L [path] : 指定当前链接库文件所在路径
-l[库文件名称(去掉前缀,去掉后缀的名称)]:链接某个库文件
动态库的环境变量:
LD_LIBRARY_PATH
都有哪些方式可以使自己的可执行程序找到自己依赖的动态库
1.将动态库放到可执行程序的路径下
2.配置LD_LIBRARY_PATH环境变量(临时)
3.放到系统库的路径下,/lib64 :对系统环境变量进行操作,极其不推荐
静态库:
特征:
win : 后缀为 .lib
linux : 前缀 : lib 后缀为: .a
生成:
注意点:使用目标程序进程编译生成
第一段:使用gcc/g++将源代码编译成为目标文件(.o文件)
第二段:使用ar -rc命令编译目标文件生成静态库
总结
以上就是本文内容,希望对大家有所帮助。
linux入门基础io(代码片段)
基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情
linux入门基础io(代码片段)
基础IO✔回顾C文件的接口✔系统文件I/O✔文件描述符文件描述符的分配规则重定向✔FILE缓冲区fclose和close✔dup2系统调用✔理解文件系统inode硬链接软链接文件的三个时间✔回顾C文件的接口在学习C语言时我们了解了一些C语言的对... 查看详情
linux下的基础io(代码片段)
目录一.C语言文件IO操作(库函数)1.打开文件fopen 2.写入二进制文件fwrite和读取二进制文件fread3.关闭文件fclose 二.系统文件IO(系统调用接口)1.打开文件open系统调用2.读文件read和写文件write3.关闭文件close 三.文件描述符1.系统管理... 查看详情
linux:基础io(代码片段)
...述符三,静态库和动态库总结前言本文将为大家介绍基础IO的相关知识,让我一起来学习吧。一,复习C语言当中学习的文件接口操作FILE*fopen(constchar*path,constchar*mode); path:待要打开的文件 mode:以何种方式打开 r:可读方... 查看详情
linux:基础io(代码片段)
...述符三,静态库和动态库总结前言本文将为大家介绍基础IO的相关知识,让我一起来学习吧。一,复习C语言当中学习的文件接口操作FILE*fopen(constchar*path,constchar*mode); path:待要打开的文件 mode:以何种方式打开 r:可读方... 查看详情
linux基础io(代码片段)
文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情
linux基础io(代码片段)
文章目录一.C文件IO相关操作二.系统文件IOopen函数返回值重定向使用dup2系统调用给简易shell中增加重定向功能理解文件系统理解软硬链接三.动态库和静态库制作动静态库一.C文件IO相关操作只有文件名但不带路径的话,默认在... 查看详情
linux基础io(代码片段)
目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情
linux基础io(代码片段)
目录系统文件IOopenwritereadclose文件描述符fdFILE重定向使用dup2系统调用文件系统磁盘磁盘和内存交互磁盘的分区与格式化Ext2文件系统的存储方案inode软硬链接软连接硬链接文件的三个时间系统文件IOopenopen接口的作用是打开文件。... 查看详情
linux基础io(代码片段)
文章目录C语言文件IOC语言文件接口汇总什么是当前路径?默认打开的三个流系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值closewriteread文件描述符fd文件描述符的分配规则重定向重定向的原理dup2... 查看详情
13linux下的基础io(代码片段)
不同操作系统所暴露出的接口是不同的,因此Linux下的一些系统调用接口是无法移植到Windows下的。文章目录一、C语言中的文件接口二、系统文件I/O2.1.系统调用接口open2.2.文件描述符fd(filedescriptor)2.3.补充内容--函数... 查看详情
5.linux基础io(代码片段)
目录open系统调用和库函数重定向文件管理、理解文件系统静态库动态库怎么打包文件 =内容+属性FILE*,c语言,软件如何理解硬件和软件的关系stdin,标准输入,键盘stdout,标准输出,显示器stderr,标准错误... 查看详情
linux练习生基础io(详细)(代码片段)
本节我们讲解基础IO的部分,将围绕以下内容进行梳理讲解:复习C文件IO相关操作认识文件相关系统调用接口认识文件描述符,理解重定向对比fd和FILE,理解系统调用和库函数的关系理解文件系统中inode的概念认识软硬... 查看详情
《linux从0到99》九基础io(代码片段)
基础IO1.回顾c语言文件操作接口2.系统调用文件操作系统01open函数02read函数03write函数04lseek函数05close函数3.文件描述符0&1&2文件描述符的分配规则(最小未分配原则)4.文件描述符与文件流指针的区别01文件流指针的本... 查看详情
万字详解linux系列基础io(代码片段)
文章目录前言(1)当前目录(2)stdin、stdout、stderr一、open(1)标志位(2)O_WRONLY(3)O_CREAT二、close,read,write三、文件描述符1.概念2.原理3.分配规则四、重定向1.输出 查看详情
万字详解linux系列基础io(代码片段)
文章目录前言(1)当前目录(2)stdin、stdout、stderr一、open(1)标志位(2)O_WRONLY(3)O_CREAT二、close,read,write三、文件描述符1.概念2.原理3.分配规则四、重定向1.输出 查看详情
linux文件系统与基础io(代码片段)
文件的宏观理解1⃣️文件在哪里呢?“狭义”上在磁盘,“广义”上一切皆文件。主要研究“狭义”,磁盘为外设,那么对文件的所有操作,本质都是对外设的输入输出,简称IO2⃣️文件是什么?空文... 查看详情
linux篇第九篇——基础io(系统文件io+文件描述符+重定向+文件系统+软硬链接)(代码片段)
⭐️这篇博客就要开始聊一聊Linux中基础IO相关知识,IO相信大家都不陌生,我们在C/C++中对文件进行读写的操作,也就是文件IO,这篇博客我也会带大家回顾一下。这篇博客还会介绍系统中的文件IO调用的接... 查看详情