C文件输入输出函数实例

        下面使用一个函数示例说明这些函数的用法。该程序把一系列文件中的内容附加在另一个文件的末尾。

#include
#include
#include
#define BUFSIZE 4096
#define SLEN 81
void append(FILE*source,FILE*dest);
char*s_get(char*st,int n);

int main(void)
{
    FILE*fa,*fs;    //fa指向目标文件,fs指向源文件
    int files=0;    //附加文件的数量
    char files_app[SLEN];    //目标文件名
    char files_src[SLEN];    //源文件名
    int ch;

    puts("Enter name of destination file:");
    s_gets(file_app,SLEN);    //获取目标文件名
    if(fa=fopen(file_app,"a+"))==NULL)
    {
        fprintf(stderr,"Can't open %s\n",file_app);    //输出到标准错误流,无法打开文件
        exit(EXIT_FAILURE);
    }
    if(setvbuf(fa,NULL,_IOFBF,BUFSIZE)!=0)
    {
        fputs("Can't create output buffer\n",stderr);
        exit(EXIT_FAILURE);
    }
    puts("Enter name of first source file (empty line to quit):");
    while(s_gets(file_src,SLEN)&&file_src[0]!='\0')
    {
        if(strcmp(file_src,file_app)==0)
            fputs("Can't append file to itself",stderr));
        else if((fs=fopen(file_src,"r")==NULL)
            fprintf(stderr,"Can't open %s\n",file_src);
        else
        {
            if(setvbuf(fs,NULL,_IOFBF,BUFSIZE!=0)
            {
                fputs("Can't create input buffer\n",stderr);
                continue;
            }
        append(fs,fa);
        if(ferror(fs)!=0)
            fprintf(stderr,"Error in reading file %s.\n",file_src);
        if(ferror(fa)!=0)
            fprintf(stderr,"Error in reading file %s.\n",file_app);
        fclose(fs);
        files++;
        printf("File %s appended.\n",file_src);
        puts("Next file (empty line to quit):");
        }
    }
    printf("Done appending. %d files appended.\n",files);
    rewind(fa);
    printf("%s contents:\n",file_app);
    while((ch=getc(fa))!=EOF)
        putchar(ch);
    puts("Done displaying.");
    fclose(fa);

    return 0;
}

void append(FILE*source,FILE*dest)
{
    size_t bytes;
    static char temp[BUFSIZE];//只分配一次
    
    while((bytes=fread(temp,sizeof(char),BUFSIZE,source))>0)
        fwrite(temp,sizeof(char),bytes,dest);
}

char*s_gets(char*st,int n)
{
    char*ret_val;
    char*find;

    ret_val=fgets(st,n,stdin);
    if(ret_val)
    {
        find=strchr(st,'\n');//查找换行符
        if(find)             //如果地址不是NULL
            *find='\0';      //在此处放置一个空字符
        else
            while(getchar()!='\n');
                continue;
    }
    return ret_val;
}

你可能感兴趣的:(c语言,服务器,前端)