UNIX-LINUX编程实践教程->第二章->实例代码注解->more01
/* more01.c - version0.1 of more * read and print 24 lines then pause for a few special commands */ #include<stdio.h> #include<stdlib.h> #define PAGELEN 24 #define LINELEN 512 void do_more(FILE*); int see_more(); int main(int ac, char *av[]) { FILE *fp;//定义一个FIEL指针 if(ac==1) { //显示信息从键盘输入 do_more(stdin); } else { //显示信息从文件读取 while(--ac) { if((fp=fopen(*++av,"r"))!=NULL)//打开文件并放到fp中 { do_more(fp); fclose(fp);//关闭文件 } else { //打开文件异常,退出 exit(1); } } return 0; } } /* *read PAGELEN lines,then call see_more() for further instructions */ void do_more(FILE *fp) { char line[LINELEN]; int num_of_lines=0; int see_more(),reply; while(fgets(line,LINELEN,fp)) /*more inut*/ { if(num_of_lines==PAGELEN)//目前已显示行数等于最大显示行数 { reply=see_more();//等待用户输入 if(reply==0)//用户输入q或输入发生错误,退出do_more函数 { break; } num_of_lines-=reply;//若用户输入enter,当前已显示函数归0;若用户输入回车,当前已显示行数减1 } if(fputs(line,stdout)==EOF)//将line里的字符写入屏幕 { //发生错误,退出 exit(1); } num_of_lines++;//目前已显示行数加一 } } /* *print message,wait for response,return # of lines to advance *q means no,space means yes,CR means one line */ int see_more() { int c; printf("\033[7m more? \033[m");//输出“more?”提示符 while((c=getchar())!=EOF)//等待用户输入 { if(c=='q')//用户输入q字符,退出see_more并返回0值 { return 0; } if(c==' ')//用户输入空格符,退出see_more并返回PAGELEN值 { return PAGELEN; } if(c=='\n')//用户输入回车符,退出see_more并返回1值 { return 1; } } return 0;//getchar函数使用时出现错误,返回0 }
1 FILE *fp
定义一个FILE型指针,可以结合fopen或fclose函数来打开一个文件
2 stdin
键盘输入
3 fopen
函数原型:FILE * fopen(const char * path,const char * mode);
path表示文件路径、mode表示打开方式、函数返回文件内容
mode="r" 以只读方式打开文件,该文件必须存在。
mode="w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
4 fclose
函数原型:int fclose(FILE *stream);
关闭stream指向的文件
如果流成功关闭,fclose 返回 0,否则返回EOF(-1)
5 exit()
关闭所有文件,终止正在执行的程序
exit(1)表示异常退出
exit(x)(x不为0)都表示异常退出
exit(0)表示正常退出
6 fgets
函数原型:char *fgets(char *s, int n, FILE *stream)
从文件指针stream中读取n-1个字符,存到以s为起始地址的空间里,直到读完一行,如果成功则返回s的指针,否则返回NULL。
7 fputs
函数原型:int fputs(char *str, FILE *fp)
向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为0;否则返回EOF(符号常量,其值为-1)
8 getchar
函数原型:#define getchar() getc(stdin)
从标准输入中读取一个字符,当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止,当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,其返回值是用户输入的第一个字符,若读取出错则返回-1(EOF)
9 关于ac av
av中存放的是:命令名称+第一个参数+第二个参数+第三个参数。。。
ac中存放的是av这个数组中的元素个数
例如:more1 more1.c
av[0]="more1"
av[1]="more1.c"
ac=2