前言
cat指令的实现 在上节课 已经讲了 只要两个参数 配合 读写函数 进行
用户会在内核读取源文件 用户在写入 内核 内核的驱动程序会把它输出到终端显示
因为 argv[0] 为固定的命令参数 所以不用在代码体现 并且查看的格式是 cat xxx.C
所以只需要在代码 写一个参数argv[1]就行了(fopen函数)。
feof ferror 函数
先写一个标准io的输出输入 函数 fputc fgetc
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *fd;
int n;
fd=fopen("w.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
printf("fopen is sueecssed\n");
fputc('A',fd);
rewind(fd); //重新偏移到0位置
n=fgetc(fd);
printf("%c\n",n);
fclose(fd);
return 0;
}
加上 feof ferror 函数 判断是否到文件尾部 和是否读写错误
fgetc 到了文件尾部就会返回 EOC EOC 就是-1
foef 和 fgetc的返回值 都是用来 判断是否到文件尾部的
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *fd;
int n;
fd=fopen("w.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
printf("fopen is sueecssed\n");
fputc('A',fd);
rewind(fd);
n=fgetc(fd);
printf("%c\n",n);
n=fgetc(fd); //判断是否到文件尾部
printf("fgetc is %d\n",n);
printf("feof is %d ferror is %d\n",feof(fd),ferror(fd));//
// 判断是否到文件尾部 和是否读写错误 打印返回值
fclose(fd);
return 0;
}
feof ==1 feror==0 分别 对应了到了文件尾部 , 不是读写错误
clearerr 函数
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *fd;
int n;
fd=fopen("w.c","w+");
if(fd==NULL)
{
printf("fopen is error\n");
return -1;
}
printf("fopen is sueecssed\n");
fputc('A',fd);
rewind(fd);
n=fgetc(fd);
printf("%c\n",n);
n=fgetc(fd);
printf("fgetc is %d\n",n);
printf("feof is %d ferror is %d\n",feof(fd),ferror(fd));
clearerr(fd);//清除流错误
printf("feof is %d ferror is %d\n",feof(fd),ferror(fd));
fclose(fd);
return 0;
}
清除流 错误之后 他不是在文件尾部 也不是读写错误 也就是一切正常。