第一个例子:将多个文件的内容读出,显示到标准输出上。
#include<stdio.h>
void copy(FILE *to,FILE *from);
int main(int argc,char *argv[])
{
FILE *fp;
if(argc == 1)
{
printf("No input file!\n");
return 1;
}
else
{
while(--argc>0)
{
//以只读方式打开文件
if((fp=fopen(*++argv,"r"))==NULL)
{
printf("ERROR: can't open %s\n",*argv);
}
else
{
copy(stdout,fp);
fclose(fp);
}
}
}
return 0;
}
void copy(FILE *to,FILE *from)
{
int c;
while((c=getc(from))!=EOF)
putc(c,to);
}
FILE *fp 定义一个文件指针
FILE *fopen(char *name,char *mode);
fopen函数以mode定义的方式打开名为name的文件,返回一个文件指针。int getc(FILE *fp)
getc函数从fp指向的文件中读入下一个字符。- int putc(int c,FILE *fp)
putc函数将字符c(int型)写入fp指向的文件当中。
其实,getchar()函数和putchar(c)函数可以由上面两个函数得到(宏定义)
#define getchar() getc(stdin)
#define putchar(c) putc((c),stdout)
我们输入./a.out main.c a.txt 把程序源文件和a.txt这个测试文件打印在屏幕上。这个程序的执行效果如下:
第二个例子:由标准输入写入某一个文件。
#include<stdio.h>
void copy(FILE *to,FILE *from);
int main(int argc,char *argv[])
{
FILE *fp;
char *p;
if(argc == 1)
copy(stdout,stdin);
else
{
while(--argc>0)
if((fp=fopen(*++argv,"w"))==NULL)
printf("error:can't open file %s\n",*argv);
else
{
copy(fp,stdin);
fclose(fp);
}
}
return 0;
}
void copy(FILE *to,FILE *from)
{
int c;
while((c=getc(from))!=EOF)
putc(c,to);
}
上面这个例子,实现了由标准输入向文件写入内容。如果执行的时候main函数不带参数,则将标准输入复制到标准输出,如果main函数后面跟文件名,则以“写”方式打开文件,将标准输入写入到文件中,如果打开文件失败,则报错。
执行效果如下: