linux编程more命令的简单实现

more 命令有三种用法:

1.more filename

2.command | more

3.more < filename

本例中在使用时要用./more_1执行也可以将more_1拷贝到/bin文件下执行,相当于添加了一条新的命令

more_1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LINE_LENGTH 512
#define PAGE_LENGTH 24

int see_more(FILE* fp_cmd)
{
    if(fp_cmd == NULL)
        printf("error stop\n");
    char ch;
    printf("\033[7m more? \033[m");//vt100编程,详细参照网上
    while((ch = getc(fp_cmd)) != NULL) // 从终端读取
    {
        if(ch =='q')
            return 0;
        if(ch == ' ')
            return PAGE_LENGTH;;
        if(ch == '\n')
            return 1;
    }
    return 0;

}

void do_more(FILE* fp)
{
    int line_num = 0;
    char line_buf[LINE_LENGTH];
    int reply;
    FILE* fp_tty;
    if((fp_tty = fopen("/dev/tty","r")) == NULL) //括号使用,没有扩起来会出错
        perror("open tty error!\n");
    while(fgets(line_buf,LINE_LENGTH,fp))
        {
            if(line_num == PAGE_LENGTH)
            {
                reply = see_more(fp_tty);
                if(reply == 0)
                    break;
                if(reply == PAGE_LENGTH)
                    line_num = 0;
                if(reply == 1)
                    line_num --;
            }
            if(fputs(line_buf,stdout) == EOF)
                exit(-1);
            line_num++;
        }
    fclose(fp_tty);
}

int main(int argc,char* argv[])
{
    FILE* fp;
    if(argc == 1)
    {
        printf("usage: more [-dflpcsu] [+linenum | +/pattern] name1 name2 ...\n");

        exit(0);
    }
    else
        {
            while(--argc)
            {
                fp = fopen(* ++argv,"r");
                if(fp != NULL)
                {
                    do_more(fp);
                    fclose(fp);
                }
                else
                    perror("open eror!\n");
            }
        }
}

遗留问题:反白显示随着案件输入跳动显示

百分比显示

要按回车键执行

稍后再做完善

时间: 2024-11-03 14:31:10

linux编程more命令的简单实现的相关文章

linux中make命令的简单使用以及Makefile文件的书写

Makefile 会不会写makele,从一个侧面说明了一个是否具备完成大型工程的能力. 一个工程中的源件不计数,其按类型.功能.模块分别放在若干个目录中,makele定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makele就像一个Shell脚本一样,其中也可以执行操作系统的命令.makele带来的好处就是"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率. ma

学习Linux系统中命令的简单方法

如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中"一切皆文件"概念虽然说是没有错,是对的.但是个人认为去学习这些"高大上"的东西不是一时半会的事儿,它需要一定的时间和经验去沉淀才能掌握.那么如何最快速了解Linux并使用呢?我依然觉得学命令.背命令,掌握命令是比较笨但却是比较快的方式. 我开始学习Linux的时候,问了前辈:我入门Linux需要掌握哪些命令呢?前

关于linux中sed命令的简单用法

linux中sed的学习和使用 今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的.sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器.即如下图: 我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容.但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了. 下面就一一介绍这个有趣的命令,莫急莫急一个一个来. 首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文

Linux最常用命令:简单易学,但能解决95%以上的问题

Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境.linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机.路由器等,Android程序最底层就是运行在linux系统上的. 一.linux的目录结构 / 下级目录结构 bin (binaries)存放二进制可执行文件 sbin (super user binaries)存放二进制可执行文件,只有root才能访问 etc

linux编程开发命令

test命令 命令功能 test命令是shell环境中测试条件表达式的实用工具. 命令语法 test(选项) 选项说明 -b〈文件〉如果文件为一个块特殊文件,则为真; -c<文件〉,如果文件为一个字符特殊文件,则为真; -d〈文件〉:如果文件为一个目录,则为真; -e〈文件〉:如果文件存在,则为真; -f〈文件〉:如果文件为一个普通文件,则为真; -g〈文件〉:如果设置了文件的SG旧位,则为真; -G〈文件〉:如果文件存在且归该组所有,则为真; -k〈文件〉:如果设置了文件的粘着位,则为真; -

Linux sort uniq 命令。简单运用

-n                              #代表以数字方法排序,如果倒序加上-r -t ':'                          #-t指定分隔符-k                           #指定第几列 ---------------------------------------------------------------------- 文本如下: root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:

Linux中awk命令的简单用法

一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.

Linux下ls命令的简单实现

 #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <sys/types.h> #include <dirent.h> #include <string.h> #include <time.h> #include <pwd.h> #include <grp

Linux C/C++编程Shell命令大杂烩(1)

1, 查看发行版信息 cat /etc/issue 2, 查看内核版本 uname -r 查看内核版本 uname -p 查看处理器类型32bit/64bit uname -n 查看网络主机名(or hostname) 3,OpenJDK和JDK啥区别? Oracle JDK is based on the OpenJDK source code. In addition, it contains closed-source components. 也就是说,OpenJDK去掉了JDK中涉及一些