zoukankan      html  css  js  c++  java
  • 20145306《信息安全系统设计基础》第10周学习总结

    编写一个who命令:

    who命令用来查看谁登录了系统(show who is logged on ),每一行代表一个巳经登录的用户,第1列是用户名,第2列是终端名,第3列是登录时间。

    who的联机帮助说who要读utmp这个文件,进一步,从以上的说明可以知道utmp这个文件里面保存的是结构体数组,数组元素是utmp类型的结构,utmp结构保存了登录记录。它包含9个成员变量,ut_user 数组保存登录名,ut_line 数组保存设备名,也就是用户的终端类型,ut_time 保存登录时间。

    who命令伪代码

    打开utmp 文件
    读取utmp中的每一条记录
    显示记录中的相关信息
    关闭utmp文件 

    who命令代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <utmp.h>
    #include <fcntl.h>
    #include <unistd.h>
     
    #define SHOWHOST
     
    int show_info( struct utmp *utbufp )
    {
    printf("%-8.8s", utbufp->ut_name);
    printf(" ");
    printf("%-8.8s", utbufp->ut_line);
    printf(" ");
    printf("%10ld", utbufp->ut_time);
    printf(" ");
    #ifdef SHOWHOST 
    printf("(%s)", utbufp->ut_host);
    #endif
    printf(" ");
     
    return 0;
    }
    int main()
    {
    struct utmp current_record;
    int utmpfd;
    int reclen = sizeof(current_record);
     
    /*打开UTMP_FILE读取信息,如果打开失败则输出失败信息。*/
    if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
    perror( UTMP_FILE );
    exit(1);
    }
    /*读取信息到存储器中,reclen就是是读的字节数,然后再调用函数打印出来。*/
    while ( read(utmpfd, &current_record, reclen) == reclen )
    show_info(&current_record);
    close(utmpfd);
    return 0;
    }
     
    运行who命令:
    2
     

     

    编写一个cp命令:

    伪代码:
    打开源文件
    创建目标文件
    针对源文件
    把源文件读入缓冲区
    把缓冲区内容写入目标文件
    关闭源文件和目标文件

    代码:

     


    ls:

    ls老师给了两个代码,第一个实现功能显示当前文件夹内容,第二个在第一个的基础上更加完善,还可显示出文件的详细信息,如读写权限,大小和创建时间等

    ls实现的功能:

        ls -l:显示文件信息
        ls -a:列出文件目录
        ls -lu:最后访问时间
        ls -s:以块为单位的文件大小
        ls -t:按时间排序
        ls -F:显示文件类型

    文件树
    文件和目录被组织成目录树(tree),节点是目录或者文件
    目录是一种特殊文件,文件内容就是目录和文件的名字,与utmp类似
    与文件不同,目录不会为空

    伪代码:

    打开目录文件
    针对目录文件
    读取目录条目
    显示文件名
    关闭文件目录文件

    ls代码:
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
    void do_ls(char []);
     
    int main(int argc, char *argv[])
    {
    if ( argc == 1 )
    do_ls( "." );
    else
    while ( --argc ){
    printf("%s: ", *++argv );
    do_ls( *argv );
    }
     
    return 0;
    }
     
    void do_ls( char dirname[] )
    {
    DIR *dir_ptr;
    struct dirent *direntp;
     
    if ( ( dir_ptr = opendir( dirname ) ) == NULL )
    fprintf(stderr,"ls1: cannot open %s ", dirname);
    else
    {
    while ( ( direntp = readdir( dir_ptr ) ) != NULL )
    printf("%s ", direntp->d_name );
    closedir(dir_ptr);
    }
    }
     
     

     



    5

    代码托管链接

     
     
  • 相关阅读:
    F#周报2019年第33期
    The .NET World——gPRC概览
    编程杂谈——Non-breaking space
    F#周报2019年第32期
    F#周报2019年第31期
    F#周报2019年第30期
    pat 乙级 1015. 德才论 (25) c++
    pat 乙级 1008. 数组元素循环右移问题 (20)
    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
    PAT-B 1005. 继续(3n+1)猜想 (25) c++
  • 原文地址:https://www.cnblogs.com/besti145306/p/6082995.html
Copyright © 2011-2022 走看看