zoukankan      html  css  js  c++  java
  • 2019-2020-1 学号《Linux内核原理与分析》第六周作业

    作业信息

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)>
    这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第一周作业>
    这个作业的目标 <给menuos中添加time命令和作业>

    1.视频

    实验过程

    首先代码如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "menu.h"
    #define FONTSIZE 10
    int PrintMenuOS()
    {
        int i, j;
        char data_M[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "  *    *  ",
            " ***  *** ",
            " * *  * * ",
            " * *  * * ",
            " *  **  * ",
            " *      * ",
            " *      * ",
            " *      * ",
            "          "
        };
        char data_e[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "          ",
            "    **    ",
            "   *  *   ",
            "  *    *  ",
            "  ******  ",
            "  *       ",
            "   *      ",
            "    ***   ",
            "          "
        };
        char data_n[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "          ",
            "    **    ",
            "   *  *   ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "          "
        };
        char data_u[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "          ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "  *    *  ",
            "   *  **  ",
            "    **  * ",
            "          "
        };
        char data_O[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "   ****   ",
            "  *    *  ",
            " *      * ",
            " *      * ",
            " *      * ",
            " *      * ",
            "  *    *  ",
            "   ****   ",
            "          "
        };
        char data_S[FONTSIZE][FONTSIZE] =
        {
            "          ",
            "    ****  ",
            "   **     ",
            "  **      ",
            "   ***    ",
            "     **   ",
            "      **  ",
            "     **   ",
            "  ****    ",
            "          "
        };
    
        for(i=0; i<FONTSIZE; i++)
        {
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_M[i][j]);
            }
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_e[i][j]);
            }
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_n[i][j]);
            }
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_u[i][j]);
            }
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_O[i][j]);
            }
            for(j=0; j<FONTSIZE; j++)
            {
                printf("%c", data_S[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }
    
    int Quit(int argc, char *argv[])
    {
        /* add XXX clean ops */
    }
    
    int Time(int argc, char *argv[])
    {
        time_t tt;
        struct tm *t;
        tt = time(NULL);
        t = localtime(&tt);
        printf("time:%d:%d:%d:%d:%d:%d
    ",t->tm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
        return 0;
    }
    
    int TimeAsm(int argc, char *argv[])
    {
        time_t tt;
        struct tm *t;
        asm volatile(
            "mov $0,%%ebx
    	"
            "mov $0xd,%%eax
    	" 
            "int $0x80
    	" 
            "mov %%eax,%0
    	"  
            : "=m" (tt) 
        );
        t = localtime(&tt);
        printf("time:%d:%d:%d:%d:%d:%d
    ",t->tm_year+1900, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
        return 0;
    }
    int hello(int argc, char *argv[])
    {
    	
    	printf("hello 20209319");
    }
    int main()
    {
        PrintMenuOS();
        SetPrompt("MenuOS>>");
        MenuConfig("version","MenuOS V1.0(Based on Linux 3.18.6)",NULL);
        MenuConfig("quit","Quit from MenuOS",Quit);
        MenuConfig("time","Show System Time",Time);
        MenuConfig("time-asm","Show System Time(asm)",TimeAsm);
        MenuConfig("hello","hello 20209319",hello);
        ExecuteMenu();
    }
    

    截图如下:

    运行结果如下:

    遇到的问题

    首先遇到无法编译问题,结果是gcc版本过低,是由于上个实验切换了gcc的版本,可以通过
    sudo update-alternatives --config gcc
    来切换gcc版本,结果如图:

    作业

    首先是寻找sort命令和search命令,截图如下:

    查看如何使用,使用格式如图:

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    int cmpfunc (const void * a, const void * b)
    {
       return ( *(int*)a - *(int*)b );
    }
    int main(){
    	int a[11];
    	int i;
    	for(i=0;i<11;i++)
    	{
    		a[i]=rand();
    	}
    	int n;
    
       	printf("排序之前的列表:
    ");
       	for( n = 0 ; n < 10; n++ ) {
          		printf("%d ", a[n]);
       	}
       	printf("
    ");
       	a[10]=20209319;
    
       qsort(a, 11, sizeof(int), cmpfunc);
    
       printf("
    排序之后的列表:
    ");
       for( n = 0 ; n < 11; n++ ) {
          printf("%d ", a[n]);
       }
       printf("
    ");
       int key;
       int nelem=11;
       int result=lfind(&key, a, &nelem,sizeof(int), cmpfunc);
         if (result)
          printf("Number %d found
    ",key);
       else
          printf("Number %d not found
    ",key);
        return 0;
    }
    

    运行结果如图:

  • 相关阅读:
    RabbitMQ入门-消息订阅模式
    RabbitMQ入门-消息派发那些事儿
    RabbitMQ入门-高效的Work模式
    RabbitMQ入门-从HelloWorld开始
    RabbitMQ入门-初识RabbitMQ
    CMake INSTALL 命令设置exe dll lib的安装位置
    VS调试DLL代码使用”附加到进程“
    模型自身面片重合引起的闪烁破损解决方法
    地球表面使用世界坐标系绘制物体闪烁破损处理方法
    3dmax osg格式导出插件 osgExp OpenSceneGraph Max Exporter
  • 原文地址:https://www.cnblogs.com/ring3toring0/p/13966242.html
Copyright © 2011-2022 走看看