📄 myopen.c
字号:
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#define BUFFSIZE 256int main(int argc, char ** argv){ //储存文件的二维数组 char file[BUFFSIZE][BUFFSIZE]; //统计行数 int line=0; //字符缓存 char buf; //读标志位 char flag; int reclen=1; int head,tail; int i=0,j=0; int fd;// printf("Please input the filename:\n"); 用于调试// scanf("%s",filename); printf("Do you want to read all?(y for all,n for specialize lines)\n"); scanf("%c",&flag); //对于文件不存在情况的错误处理 if((fd=open(argv[1],O_RDONLY))==-1) { printf("Oops..This file doesn't exit!\n"); exit(1); } //读出文件 while(read(fd,&buf,sizeof(buf))==1){ if(buf==EOF) return 0; //通过"\n"来判断行 else if(buf!='\n') file[i][j++]=buf; else { file[i][j]='\n'; i++; j=0; //计算行数 line++; } // printf("%c\n",buf); } file[i][j]=EOF; //输出全部文件 if(flag=='y'){ for(i=0;i<line;i++) { //通过"\n"来判断行 for(j=0;file[i][j]!='\n';j++) printf("%c",file[i][j]); printf("\n"); } printf("The total line is:"); printf("%d",line+1); printf("\n"); } //输出制定的行数 else{ printf("Please input the lines:"); scanf("%d%d",&head,&tail); for(i=head-1;i<tail;i++) { for(j=0;file[i][j]!='\n';j++) printf("%c",file[i][j]); printf("\n"); } } //关闭文件 close(fd); return 0;}