标准 IO 与文件IO总结

标准io与文件io区别

标准 IO

文件IO

概念

C库中定义的一组用于输入输出的函数

posix中定义的一组输入输出的函数

特点

有缓冲机制,减少系统调用,提高效率

无缓冲机制

围绕流进行操作,FILE *p

围绕文件描述符操作,非负整数

默认打开三个流:stdin/stdout/stderr

默认打开三个文件描述符:0/1/2

只能操作普通文件

可以操作除了目录以外的任意类型文件

可移植性更强

可移植性弱

函数

打开文件: fopen \freopen

打开文件: open

关闭文件 :fclose

关闭文件:close

读文件:fgetc \ fgets \ fread

读文件:read

写文件:fputc \ fputs \ fwrite

写文件:write

定位操作:rewind \ fseek \ ftail

定位操作:lseek

 

标准 IO

函数

功能

参数

返回值

备注

fopen

打开文件

path:打开的文件路径

mode:打开的方式

成功:文件流

失败:NULL

fgetc

从文件中读取一个字符

stream:文件流

成功:读到的字符

失败或读到文件末尾:EOF(-1)

将当前文件指针位置向后移动一个字符

fputc

向文件中写入一个字符

c:要写的字符

stream:文件流

成功:写的字符的ASCII

失败:EOF(-1)

fgets

从文件中每次读取一行字符串

s:存放字符串的地址

size:期望一次读取的字符个数

stream:文件流

成功:s的地址

失败或读到文件末尾:NULL

每次实际读取的字符个数为size-1个,会在末尾自动添加\0

每次读一行,遇到\n或者到达文件末尾后不再继续读下一行

并把它存储在s所指向的字符串内。

fputs

向文件中写字符串

s:要写的内容

stream:文件流

返回值:成功:非负整数

失败:EOF

fread

从文件流读取多个元素(将二进制数据从文件读出)

ptr :是一个指针,是存放数据的存储空间的起始地址,用来存放读取元素

size :元素大小 sizeof(元素数据类型)

nmemb :读取元素的个数

stream :要读取的文件流

成功:读取的元素的个数

读到文件尾或失败: 0

fwrite

将二进制数据写入文件

ptr :是一个指针,保存要输出数据的空间的地址。

size :要写入的字节数 sizeof(数据类型)

nmemb : 要进行写入元素的个数

strem: 目标文件流指针

成功:写的元素个数

失败 :-1

freopen

将指定的文件流重定向到打开的文件中

path:文件路径

mode:打开文件的方式(同fopen)

fp:文件流指针

成功:返回文件流指针

失败:NULL

fseek

文件的定位操作

stream:文件流

offset:偏移量:

whence:相对位置:

成功:0

失败:-1

正数表示向后文件尾部偏移,

负数表示向文件开头偏移

SEEK_SET:相对于文件开头

SEEK_CUR:相对于文件当前位置

SEEK_END:相对于文件末尾

ftell

获取当前的文件位置

要检测的文件流

成功:当前的文件位置,

出错:-1

 

 

文件 IO

函数

参数

返回值

备注

open

打开文件

pathname:文件路径名

flags:打开文件的方式

成功:文件描述符

失败:-1

当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限

read

从一个已打开的可读文件中读取数据

fd 文件描述符

buf 存放位置

count 期望的个数

成功:实际读到的个数(小于期望值说明实际没这么多)

返回0:表示读到文件结尾

返回-1:表示出错,并设置errno号

write

向指定文件描述符中写入数据。

fd 文件描述符

buf 要写的内容

count 期望写入字节数

成功:实际写入数据的个数

失败 : -1

lseek

设定文件的偏移位置

fd:文件描述符

offset: 偏移量

成功:文件的当前位置

失败:-1

正数:向文件结尾位置移动

负数:向文件开始位置

SEEK_SET 开始位置

SEEK_CUR 当前位置

SEEK_END 结尾位置

文件属性

函数

参数

返回值

stat

path:文件路径名

buf:保存文件属性信息的结构体

成功:0

失败:-1

structstat{

                ino_t st_ino;/* inode号 ls -il */

                mode_t st_mode;/* 文件类型和权限 */

                nlink_t st_nlink;/* 硬链接数 */

                uid_t st_uid;/* 用户ID */

                gid_t st_gid;/* 组ID */

                off_t st_size;/* 大小 */

                time_t st_atime;/* 最后访问时间 */

                time_t st_mtime;/* 最后修改时间 */

                time_t st_ctime;/* 最后状态改变时间 */

        };

 

目录操作

函数

功能

参数

返回值

opendir

读目录

要读的目录流

成功:读到的信息

失败:NULL

structdirent{

                ino_t d_ino;/* 索引节点号*/

                off_t d_off;/*在目录文件中的偏移*/

                unsignedshort d_reclen;/* 文件名长度*/

                unsignedchar d_type;/* 文件类型 */

                char d_name[256];/* 文件名 */

        };

 

静态库的制作

动态库的制作

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值