【无标题】linux文件的操作

本文详细介绍了Linux系统中的文件IO,包括7种文件属性、标准IO与文件IO的区别,以及打开、操作和关闭文件的相关函数,如fopen、fgetc、fwrite等。此外,还提到了文件定位函数fseek和文件流管理。最后,讨论了静态库和动态库的特性及其在程序执行中的作用。
摘要由CSDN通过智能技术生成

linux文件IO

Linux下的7种文件属性:

  1. 普通文件  -
  2. 目录文件  d
  3. 符号链接文件(软链接): l
  4. 字符设备文件:c
  5. 块设备文件 :b
  6. 管道文件:p
  7. 套接字文件:

 IO分为:

标准IO(高级磁盘IO):存在缓冲区 通过文件流(FILE)操作文件

文件IO(低级磁盘IO) :不存在缓冲区,通过文件描述符来(非负的数字)操作文件

文件被打开时会具备3个类:

stdin(标准输入--键盘)stdout(标准输出--终端) stderr(标准出错)会向终端打印 

缓冲机制:

1.全缓冲:缓冲区被放满,程序结束,强制刷新--》会引起缓冲区的刷新

2.行缓冲:缓冲区被放满,程序结束,强制刷新,遇到换行符--》会引起缓冲区的刷新

3.不带缓冲:不存在缓冲区的概念---《每一次读写都是直接输出:stderr》

 

 

 标准文件 IO

1.打开文件

函数 FILE* fopen(const  char * path,const char*mode)

参数1:需要打开文件的名字(可以包含路径,指针类型)

参数2:打开文件的方式(指针类型)

返回值:

       打开文件成功之后的文件流指针

       失败为NULL

mode:

r/rb:打开只读 ,文件必须存在

r+/ r+b  打开文件可读可写,文件必须存在

w/wb 打开只写文件,注意文件不存在则新建 存在则会清空之前内容

w+、w+b  wb+:打开可读可写 同上不存在新建,存在清空

a、ab:以附件方式打开只写文件,注:文件存在写的数据会追加文件尾 不存在新建

a+、a+b、ab+ 以附件方式打开,可读写注意同上

2.操作文件

(1)按照字符操作:fgetc fputs

int fgetc(FILE *stream);

功能:从指定的文件流中获取一个字符

参数:

     指定获取一个字符所处文件的文件流

返回值:

       成功返回获取到的字符值

       读取到文件末尾返回EOF(-1)

       操作中失败返回负数

int fputc(int c, FILE*stream);

功能:向指定的文件流中输出一个字符

参数:

     参数1:需要输出的指定字符(字符被称为单字节的整形)

     参数2:指定输出字符到的文件对应的文件流

返回值:

       成功返回刚写入的字符值

       失败返回EOF(-1)

(2)按照行操作

标志:寻找’\n’

函数: fgets   fputs

函数原型:

char * fgets(char *s, int size, FILE *stream);

参数1 : 即将存储内存空间首地址

参数2:存储内容空间的大小(可以sizeof()测得)

参数3:  指定的文件流

返回值: 

成功返回存储内容空间首地址

 失败返回NULL

情况1:第一次遇到’\n’就会返回

情况2:该行会比较长,需要多次读取才能读完,所以位于读到’\n’之前的多次都是读取到size-1就返回。

(3)按块操作

fread()    fwrite()

函数原型

       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

       参数1:存储读取一块内容之后的空间地址

       参数2:块的大小---》建议给1

       参数3:块的个数---》建议给sizeof()

       参数4:要读取的文件对应的文件流

       返回值:成功代表读取的块的个数,失败返回0

       size_t fwrite(const void *ptr, size_t size, size_t nmemb,

                     FILE *stream);

       参数1:需要写入的内容的空间地址

       参数2:块的大小---》建议给1

       参数3:块的个数---》建议给sizeof()

       参数4:要写入的文件对应的文件流

       返回值:成功代表写入的块的个数,失败返回0

        定位流

 fseek()

参数1 文件流 

参数2 偏移位置   以参数3文件指针流偏移多少

参数3 基准 SEEK_SET以文件首为基准

SEEK_CUR 以当前为基础

SEEK_END 以文件尾为基准

ftell()获取当前文件位置

rewind()设定文件位置为文件开始

perror(“string”);---》可以输出出错的原因

eof(FILE* Stream);

 作用:判断文件是否抵达末尾(不管是文本文件还是二进制文件,都可以判断)

   返回值:

          抵达文件末尾---》返回值为非零

          未抵达文件末尾---》返回值0

关闭文件

fclose(FILE*stream)

文件IO

文件IO使用的函数比较少,

open   close   read   write

打开文件

int open(const char *pathname, int flags, mode_t mode);

       功能:打开指定的文件

       参数:

             参数1:所需打开文件的名字(包含路径)

             参数2:打开文件的方式---》主标志 | 副标志

             参数3:当需要O_CREAT时,就要写该参数来为创建的新文件指明权限(八进制表示)

 文件操作

写文件

 ssize_t write(int fd, const void *buf, size_t count);

       功能:向指定的文件描述符的文件内写入内容

参数:

     参数1:打开文件之后的文件描述符

     参数2:所需写入的内容所在空间首地址

     参数3:需要写入的字节数

返回值:

       成功返回写入的字节数

       返回0代表没有写入任何内容

       返回-1代表出错(errno is set...)

读文件

ssize_t read(int fd, void *buf, size_t count);

        功能:从指定的文件描述符的文件中读取内容

参数:

      参数1:打开文件之后的文件描述符

      参数2:存储读取到结果的空间首地址

      参数3:可以读取的字节数---》sizeof测得

返回值:

        成功返回读取的字节数

        返回0代表读取完毕

        返回-1代表出错(errno is set...)

 

 文件定位

 关闭文件

int close(int fd)

总结:

标准IO

使用的函数带f   文件IO不带f  操作流程一般就是打开文件 返回一个文件流或者文件描述符

然后对相应进行读写操作 然后 关闭文件。注意:在对同一个文件读写操作时注意文件描述符的位置在哪!!!!

目录操作

opendir   readdir   closedir

 

 

 

 

 

 

 

 制作静态库和动态库

库时一种可执行代码的二进制形式,可以被操作系统载入内存执行,

静态库:在程序编译会被链接到目标代码中,运行时将不需要该静态库,因此体积表大

动态库:动态在程序编译不会被链接,而是在程序运行时带载入,体积小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值