//倒序显示文件内容
#include <stdio.h>
#include <stdlib.h>
#define CNTL_Z '\032'
#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()的第一个参数是FILE指针,指向待查找的文件,fopen()应该已打开该文件。
fseek()的第二个参数是偏移量。该参数表示从起点开始要移动的距离。该参数必须是一个long类型的值,可以正--前移,负--后移,零--保持不动
fseek()的第三个参数是模式,该参数确定起始点。
如果一切正常,fseek()的返回值为0,否则返回值为-1。
*/
fseek(fp, 0L, SEEK_END); //定位到文件末尾
//ftell()函数的返回类型是long类型,它返回的是参数指向文件的当前位置距文件开始处的字节数(定义在stdio.h中)
last = ftell(fp);
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;
}
该程序使用二进制模式,以便处理MS-DOS文本和UNIX文件。但是,在使用其他格式文本文件的环境中可能无法正常工作。
注意
如果通过命令行环境运行该程序,待处理文件要和可执行文件在同一目录(或文件中)。