《linux程序设计学习笔记》之一---标准I/O库的使用

标准I/O库中主要有如下函数;

fopen、fclose

fread、fwrite

fflush-

fseek-

fgetc、getc、getchar

fputc、putc、putchar

fgets、gets

printf、fprintf、sprintf

scanf、fscanf、sscanf

和底层调用一样,再启动程序时,有3个文件流的自动打开的。stdin、stdout、stderr,分别对应标准输入、标准输出、标准错误输出,与底层文件描述符0,1,2相对应。


1.fopen函数

#include <stdio.h>

FILE *fopen(const char *filename ,const char *mode);

成功时返回一个非空的FILE*指针,失败时返回NULL值。如果你需要对设备进行明确的控制,那么最好使用open调用。

程序用例:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 int main()
  5 {
  6     int c;
  7     FILE *in,*out;
  8 
  9     in = fopen("file.in","r");
 10     out = fopen("file.out","w");
 11 
 12     while((c = fgetc(in)) != EOF)
 13         fputc(c,out);
 14     exit(0);
 15 }


2.fread函数与fwrite函数

#include <sdio.h>

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


#include <stdio.h>

size_t fwrite(void *ptr, size_t size ,size_t ntimes , FILE *stream);

数据从文件流读到(写入)由ptr指向的数据缓冲区。fread和fwrite函数都是对记录进行操作,size参数指定每个记录的长度,计数器ntimes给出要传输的记录个数。它的返回值的成功读到(写入)数据缓存区的记录个数(而不是字节数)。当到大文件尾时,它的返回值可能会小于ntimes,甚至可以是零。这一点与read和write系统调用有些不同。


程序用例:

  1 #include<stdio.h>
  2 #include<string.h>
  3 int main()
  4 {
  5     FILE *fd;
  6     size_t size1,size2;
  7     char *buf = new char[1024*1024];
  8     memset(buf,0,1024*1024);
  9     fd = fopen("test.txt","r");
 10     if(fd  == NULL)
 11         printf("open file failed\n");
 12     size1 = fread(buf,1024,1024,fd);
 13     printf("size1 = %d\n",size1);
 14     fclose(fd);
 15     fd = fopen("test.txt.out","w");
 16     if(fd == NULL)
 17         printf("open file failed\n");
 18     size2 = fwrite(buf,1024,1024,fd);
 19     printf("size2 = %d\n",size2);
 20     fclose(fd);
 21     return 0;
 22 }

运行程序:

size1 = 0
size2 = 1024



3.fgetc、getc、getchar

#include <stdio.h>

int fgetc(FILE *stream);

int getc(FILE *stream);

int getchar();

fgetc和getc左右一样, 从文件流去除下一个字节并且把它作为一个字节返回;getchar()相当于getc(stdin)他从标准输入读取下一个字节。 注意这三个函数返回值为字符所对用的ASCII值。

同理

fputc、putc、putchar函数与fgetc、getc、getchar用法相同

#include<stdio.h>

int fputc(int c ,FILE *stream);

int putc(int c, FILE * stream);

4.fgets、gets函数

#include<stdio.h>

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

char *gets(char *s);

fgets把读到的字符写到s指向的字符串里,直到遇到换行符,已经传输了n-1个字符,或者到达文件尾他会把遇到的换行符也传递到接受字符串里,再加上一个表示结尾的空字节\0。

gets函数从标准输入读取数据并且丢弃换行符,对传输的字符没有限制,故有可能溢出缓冲区,不推荐使用gets函数。

程序用例:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 int main()
  5 {
  6     FILE *in,*out;
  7     char *str = new char[4096];
  8     in = fopen("file.in","r");
  9     while (fgets(str,4096,in))
 10     {
 11         fprintf(stdout,str);
 12     }
 13     return 0;
 14 }

fgets会把遇到的换行符也传递到接受字符串里,此程序会输出

123
qwe
add


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值