第一个例子:将多个文件的内容读出,显示到标准输出上。

#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);
}
  1. FILE *fp 定义一个文件指针

  2. FILE *fopen(char *name,char *mode);
    fopen函数以mode定义的方式打开名为name的文件,返回一个文件指针。

  3. int getc(FILE *fp)
    getc函数从fp指向的文件中读入下一个字符。

  4. 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函数后面跟文件名,则以“写”方式打开文件,将标准输入写入到文件中,如果打开文件失败,则报错。
执行效果如下: