unix编程实训教程之 more(觉醒篇一 Begin)

觉醒篇:学了太多的命令 实在觉得没有什么意思 死板枯燥和死人何异?

漫漫长路学其形忘其神 何用? 改变一下自己的观念,其实这个世界很精彩。


首先,more能做什么?

more 可以说分页显示文件内容,大部分的Unix系统都有文件文本/etc/termcap,它经常被文本编辑器和游戏程序使用

语法

more filename//显示文本内容

comand | more //讲comand命令分页显示

more < filename //从标准输入中获取分页显示的内容

逻辑

  显示24行内容

  print【more】 ?

  输入Enter、Space、or q

 if Enter ,显示一行

 if Space 一页

 if q ,break -> exit

系统调用: 

1.fgets(str,n,fp)

str:存放在字符串的起始位置,字符串名

n:int类型,取n-1个字符放入str的空间内

fp:文件指针 读到换行orEOF文件结束

2.fputs(str,fp)

将字符串写入文件

#include <stdio.h>
#include <stdlib.h>

#define plen 24
#define Lline 512

void do_more(FILE *);
int see_more();

int main( int ac , char* av[])//表示输入了多少条字符串 * av[]是字符串指针
{
 FILE *fp;
 if(ac == 1)
    do_more(stdin);//stdin
 else
    while(--ac)
    {
      if((fp = fopen(* ++av,"r")) != NULL )
        {
           do_more(fp);
           fclose(fp);
        }
      else
         exit(1);
    }
  return 0;
}

void do_more(FILE *fp)
{
  char line[Lline];
  int replay;
  int set_more();
  int num_of_line = 0;
 while(fgets(line,Lline,fp))
   {
     if(num_of_line == plen)
       {
         replay = set_more();
         if(replay == 0)
                break;
         num_of_line -= replay;
      }
     if(fputs(line,stdout) == EOF)
       exit(1);
     num_of_line++;
  }
}

int set_more()
{
  int c;
  while((c=getchar())!=EOF)
 {
   if(c == ' ')
    return plen;
   if(c == 'q')
    return 0;
   if(c == '\n')
   return 1;
 }
}
                                  
编译
gcc cmore.c
./a.out filename




你可能感兴趣的:(编程,unix,linux命令)