《UNIX环境高级编程》学习笔记三 —— 标准I/O库

10 篇文章 0 订阅

1.缓冲函数

        #include   <stdio.h>

        int  fflush(FILE  *fp);

        该函数使该流所有未写的数据都被传送至内核。

        函数成功返回0;函数失败返回-1。

 

2.打开流函数

        #include  <stdio.h>

        FILE  *fopen(const  char  *restrict  pathname,  const  char  *restrict  type);

        该函数打开一个指定文件。

        函数成功返回文件指针;函数失败,返回NULL 

        #include  <stdio.h>

        int  fclose(FILE  *fp);

        该函数关闭一个打开流。 

        函数成功返回0;函数失败,返回EOF。

 

3.读写流(每次一个字符)

        #include  <stdio.h>

        int  getc(FILE  *fp);  

        int  fgetc(FILE  *fp);

        函数可用于一次读一个字符。

        函数成功,返回下一个字符;函数失败返回EOF。

        注意:1.fgetc可以得到其地址,所以允许将fgetc的地址作为一个参数传送给另一个函数;

                   2.getc可被实现为一个宏,所以调用fgetc所需时间可能比调用getc时间长。

 

        #include  <stdio.h>

        int   ferror(FILE  *fp);

        int   feof(FILE  *fp); 

        函数用于判断文件出错还是到达文件尾端。

       若函数出错或到达文件尾端,返回非0;否则,返回0。

 

       #include  <stdio.h>

       int  putc(int  c,  FILE  *fp);

       int  fputc(int  c, FILE  *fp);

       输出函数。

       函数成功,返回c;函数失败,返回EOF。

 

4.读写流(每次一行I/O)

     #include  <stdio.h>

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

     char  *gets(char  *buf);

     对于fgets,必须指定缓冲长度n。此函数一直读到下一个换行符为止,但是不超过n-1个字符。读入字符被送入缓冲区,该缓冲区以null字节结尾。

      gets不推荐使用,因为不能指定缓冲区长度,容易导致缓冲区溢出。(若该行长于缓冲区长度,会产生不可预料后果。如1988年的因特网蠕虫事件)

 

       该函数每次读取一行。成功返回buf;失败返回NULL。

 

       #include  <stdio.h>

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

       int  puts(const  char  *str);

 

       函数成功返回非负值;函数失败返回EOF。

 

5.格式化I/O

       #include  <stdio.h>

       int   printf(const  char  *restrict  format,  ...);

       int  fprintf(FILE  *restrict  fp,  const  char  *restrict  format, ...);

       int  dprintf(int  fd,  const  char *restrict  format, ...);

       int  sprintf(char  *restrict  buf,  const  char  *restrict  format,  ...);

 

      printf把数据写到标准输出上;fprintf写至指定流;dprintf写至指定文件描述符;sprintf将字符写入数组,并在尾端自动加入null,但null字符不包括在返回值中。

      其他参数的使用格式如下:

%[flags] [fldwidth] [precision] [lenmodifier] [convtype]

flags说明
将整数按千位分组字符
-在字段左对齐输出
+显示带符号转换的正负号

      fldwidth:说明最小字段宽度,若转换后字符数小于宽度,则多余字符位置用空格填充。

     precision:说明整形转换后最小输出位数、浮点数转换后小数点后的最小位数。(. 后跟非负十进制数)

lenmodifier说明
hh按char类型输出
h按short类型输出
l按long类型输出
ll按long  long类型输出
L按long  double类型输出
convtype说明
d、i有符号十进制
u无符号十进制
o无符号八进制
x、X无符号十六进制
e、E指数格式双精度浮点数
s字符串
p指向void指针

      函数成功返回存入字符数;函数失败返回负值。

 

       #include  <stdio.h>

       int  scanf( const  char  *restrict  format, ...);

       int  fscanf( FILE  *restrict  fp,  const  char  *restrict  format, ...);

       int  sscanf( const  char  *restrict  buf,  const  char  *restrict  format, ...);

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值