各种读写函数的整理

一、文件I/O

首先是最原始的read函数,其原型是ssize_t read(int fileds, void *buf, size_t nbytes);

若read 成功则返回读到的字节数,如达到文件结尾则返回0, 若读取出错则返回-1,通过errno设置错误码。

值得注意的地方是当读取普通文件时,如读到文件尾端不够设置的字节数,则返回读到的字节数,下次调用read时,则会返回0.

write函数与此类似,其原型是ssize_t write(int fileds, const void *buf, size_t nbytes);

二、标准库I/O

 

1、一次处理一个字符

在标准I/O库中,一次读一个字符的函数有三个:

int getc(FILE *fp);

int fgetc(FILE *fp);

int getchar(void);

三个函数若成功则返回下一个字符,若已达到文件尾或出错则返回EOF。

为了区分是出错还是到达文件尾端,对返回的EOF要进行判断,此时可以使用ferror或feof,其原型是:

int ferror(FILE *fp);

int feof(FILE *fp);

两个函数为真时返回非零值,否则返回0.

与上面相对应的一次写一个字符的函数也是三个:

int putc(int c, FILE *fp);

int fputc(int c, FILE *fp);

int putchar(int c);

三个函数若成功则返回c,若出错则返回EOF。

 

2、一次处理一行字符

每次读取一行的函数有两个:

char *fgets(char *restrict buf, int n, FILE *restrict fp);

char *gets(char *buf);

两个函数若若成功则返回buf,若已达到文件结尾或出错则返回NULL.

对于fgets,此函数一直读到换行符为止,但不超过n-1个字符,以null字符结尾被送入缓冲区。若文件中某行大于n-1个字符,则返回一个不完整的行,下次调用时再继续。

gets不推荐使用,因为使用gets时不能确定长度,有可能造成缓冲区溢出,发生意想不到的后果。

另外值得注意的是,读取的时候fgets会保留换行符,而gets则会自动删除换行符。

与此对应的每次输出一行的函数:

int fputs(const char *restrict str, FILE *restrict fp);

int puts(const char *str);

两个函数若成功则返回非负值,出错返回EOF。

fputs将一个以null符终止的字符串写到指定的流,null不写出,此时并不要求每次输出一行,不要求null前为换行符。

puts同样将null符终止的字符串写到标准输出,Null不写出,但是puts会将一个换行符写到标准输出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值