zoukankan      html  css  js  c++  java
  • UNIXLINUX编程实践教程>第二章>实例代码注解>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

  • 相关阅读:
    IDEA中代码无故报红解决方法
    CAP原则的基本理论知识
    Java IO 拷贝MP3文件,包括递归子文件夹下的文件
    maven 配置阿里云镜像 settings.xml内容
    Restful API 级别及意义
    日常巡检(脚本)
    使用Matplotlib画图系列(一)
    Python 阶乘factorial
    交叉验证思想
    FeatureSelectors
  • 原文地址:https://www.cnblogs.com/cation/p/2803142.html
Copyright © 2011-2022 走看看