编辑代码

/* reverse.c -- 倒序显示文件的内容 */
#include <stdio.h>
#include <stdlib.h>

#define CNTL_Z '\032' /* DOS文本文件中的文件结尾标记 */
#define SLEN 81

int main(void)
{
    char file[SLEN];
    char ch;
    FILE *fp;
    long count, last;

    puts("Enter the name of the file to be processed:");
    scanf("%80s", file);
    if ((fp = fopen(file, "rb")) == NULL)//二进制只读模式
    { /* 只读模式 */
        printf("reverse can't open %s\n", file);
        exit(EXIT_FAILURE);
    }

    fseek(fp, 0L, SEEK_END); /* 定位到文件末尾 */
    last = ftell(fp);//ftell()函数的返回类型是long,它返回的是当前的位置。

    for (count = 1L; count <= last; count++)
    {
        fseek(fp, -count, SEEK_END); /* 回退 */
        ch = getc(fp);

        if (ch != CNTL_Z && ch != '\r') /* MS-DOS 文件 */
            putchar(ch);
    }

    putchar('\n');
    fclose(fp);
    return 0;
}