20145207《信息安全系统设计基础》第十周学习总结

周五周六两整天一直在弄电脑的虚拟机还有git的问题,真心觉得相对于其他课程来讲,这门课花费的时间真是不成正比。需要查那么多资料,才能勉强把基础看懂。而且git的问题,单单就就我这个而言,我不觉得没被扣分的人会比我用心。我问了超级多的人,单单就我这个电脑来讲,可能不大好解决。实验楼一般也都不git。所以。。唉没话说。。。语句我都知道怎么用,就是我这个传不上去。我用同学的传上去了。我的我再搞吧。心累、

代码

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h> //read

#include <sys/types.h>  //open

#include <sys/stat.h>

#include <fcntl.h>

#include <utmp.h>   //utmp

#include <time.h>   //strftime

int main()

{

struct utmp record;

int fd;

int len = sizeof(record);

struct tm *p;

time_t t;

char fortime[40];

if ( (fd = open(UTMP_FILE, O_RDONLY)) == -1 )

{

perror( UTMP_FILE );

exit(1);

}

while(read(fd,&record,len))

{

if(record.ut_type == USER_PROCESS)//只显示类型为USER_PROCESS的一般进程

{

printf("%-10.10s",record.ut_user);

printf("%-10.10s",record.ut_line);

//以下为对时间的转换操作

t = record.ut_time;

p = localtime(&t);

strftime(fortime,40,"%F %R",p);

printf("%12s",fortime);

if(record.ut_host[0]!=‘\0‘);

printf("\t(%s)",record.ut_host);

printf("\n");

}

}

if (close(fd) == -1)

{

perror( UTMP_FILE );

exit(1);

}

return 0;

filesize

1)代码

#include <stdio.h>

#include <sys/stat.h>

int main()

{

struct stat infobuf;

if ( stat( "/etc/passwd", &infobuf) == -1 )

perror("/etc/passwd");

else

printf(" The size of /etc/passwd is %d\n", infobuf.st_size );

}

2)功能

  • 用st_size计算文件的字节数大小。

fileinfo

1)代码

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

void show_stat_info(char *, struct stat *);

int main(int argc, char *argv[])

{

struct stat info;

if (argc>1)

{

if( stat(argv[1], &info) != -1 ){

show_stat_info( argv[1], &info );

return 0;

}

else

perror(argv[1]);

}

return 1;

}

void show_stat_info(char *fname, struct stat *buf)

{

printf("   mode: %o\n", buf->st_mode);

printf("  links: %d\n", buf->st_nlink);

printf("   user: %d\n", buf->st_uid);

printf("  group: %d\n", buf->st_gid);

printf("   size: %d\n", (int)buf->st_size);

printf("modtime: %d\n", (int)buf->st_mtime);

printf("   name: %s\n", fname );

}

2)功能

#include    <stdio.h>

#include    <sys/types.h>

#include    <dirent.h>

void do_ls(char []);

int main(int argc, char *argv[])

{

/*如果操作数只有1个,表明ls后面没有带参数,默认为当前目录,.表示当前目录。*/

if ( argc == 1 )

do_ls( "." );

/*如果ls后面有参数,就把参数读入argv中。*/

else

while ( --argc ){

printf("%s:\n", *++argv );

do_ls( *argv );

}

return 0;

}

/*因为ls和dir功能相近,用dir来实现ls*/

void do_ls( char dirname[] )

{

DIR     *dir_ptr;

struct dirent   *direntp;

/*如果没有指向的那个地址,报错*/

if ( ( dir_ptr = opendir( dirname ) ) == NULL )

fprintf(stderr,"ls1: cannot open %s\n", dirname);

else

{

/*递归的方式来读取*/

while ( ( direntp = readdir( dir_ptr ) ) != NULL )

printf("%s\n", direntp->d_name );

closedir(dir_ptr);

}

}

  • 这个功能用来实现显示文件信息

mode:st_mode        文件的类型和存取的权限

links:st_nlink      连到该文件的硬链接数目,刚建立的文件值为1

user:st_uid         用户ID

group:st_gid        组ID

size:st_size        文件字节数

modtime:st_mtime    最后一次修改时间

name:               输入的文件名

setechoechostate

1)代码

setecho

#include        <stdio.h>

#include        <stdlib.h>

#include        <termios.h>

#define  oops(s,x) { perror(s); exit(x); }

int main(int argc, char *argv[])

{

struct termios info;

if (argc == 1) //后面没有带参数的话就不做任何操作,退出

exit(0);

if (tcgetattr(0,&info)==-1)//tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios 结构体中,这里fd为0,是标准输入。这句用于读取设备属性

oops("tcgettattr", 1);

if ( argv[1][0] == ‘y‘ )//如果运行命令后面的参数第一个字母是“y”,执行“设置打开提示符”的命令

info.c_lflag |= ECHO ;/*打开提示符*/

else//对其它所有的参数都执行“设置隐藏提示符”的命令

info.c_lflag &= ~ECHO ;/*隐藏提示符*/

if ( tcsetattr(0,TCSANOW,&info) == -1 )//将修改后的参数写回设备

oops("tcsetattr",2);

return 0;

}

echostate

#include        <stdio.h>

#include        <stdlib.h>

#include        <termios.h>

int main()

{

struct termios info;

int rv;

rv = tcgetattr( 0, &info );     /* read values from driver      */

if ( rv == -1 ){

perror( "tcgetattr");

exit(1);

}

if ( info.c_lflag & ECHO )

printf(" echo is on , since its bit is 1\n");

else

printf(" echo is OFF, since its bit is 0\n");

return 0;

}

2)功能

  • setecho用来改变输入指令是否可见。
  • 输入y(或是以y开头的一串字符),命令可见

否则(即输入不以y开头的字符),命令不可见

  • echostate显示输入命令是否可见。
  • echo is on:命令可见

echo is off:命令不可见

spwd

1)代码

#include    <stdio.h>

#include    <stdlib.h>

#include    <string.h>

#include    <sys/types.h>

#include    <sys/stat.h>

#include    <dirent.h>

ino_t   get_inode(char *);

void    printpathto(ino_t);

void    inum_to_name(ino_t , char *, int );

int main()

{

printpathto( get_inode( "." ) );

putchar(‘\n‘);

return 0;

}

void printpathto( ino_t this_inode )

{

ino_t   my_inode ;

char    its_name[BUFSIZ];

if ( get_inode("..") != this_inode )

{

chdir( ".." );

inum_to_name(this_inode,its_name,BUFSIZ);

my_inode = get_inode( "." );

printpathto( my_inode );

printf("/%s", its_name );

}

}

void inum_to_name(ino_t inode_to_find , char *namebuf, int buflen)

{

DIR     *dir_ptr;

struct dirent   *direntp;

dir_ptr = opendir( "." );

if ( dir_ptr == NULL ){

perror( "." );

exit(1);

}

while ( ( direntp = readdir( dir_ptr ) ) != NULL )

if ( direntp->d_ino == inode_to_find )

{

strncpy( namebuf, direntp->d_name, buflen);

namebuf[buflen-1] = ‘\0‘;

closedir( dir_ptr );

return;

}

fprintf(stderr, "error looking for inum %d\n", (int) inode_to_find);

exit(1);

}

ino_t get_inode( char *fname )

{

struct stat info;

if ( stat( fname , &info ) == -1 ){

fprintf(stderr, "Cannot stat ");

perror(fname);

exit(1);

}

return info.st_ino;

}

testioctl

1)代码

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

int main()

{

struct winsize size;

if( isatty(STDOUT_FILENO) == 0)

exit(1);

if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) < 0) {

perror("ioctl TIOCGWINSZ error");

exit(1);

}

printf("%d rows %d columns\n", size.ws_row, size.ws_col);

return 0;

}

2)功能

  • 获得终端设备的窗口大小

cp

1)代码

#include        <stdio.h>//标准输入输出

#include        <stdlib.h>//C标准函数库

#include        <unistd.h>//Unix类系统定义符号常量

#include        <fcntl.h>//定义了很多宏和open,fcntl函数原型

#define BUFFERSIZE      4096//定义存储器容量

#define COPYMODE        0644//定义复制的长度

void oops(char *, char *);

int main(int argc, char *argv[])

{

int in_fd, out_fd, n_chars;//三个描述符值

char buf[BUFFERSIZE];//存储器位置

if (argc != 3) {//检查argc的值是否为三,如果不是,返回标准错误

fprintf(stderr, "usage: %s source destination\n", *argv);

exit(1);

}

/*检查cp的第一个参数,要复制的文件,用open打开,in_fd为open返回的描述符

如果返回-1,代表打开失败,提示错误*/

if ((in_fd = open(argv[1], O_RDONLY)) == -1)

oops("Cannot open ", argv[1]);

/*检查cp的第二个参数,复制的目的地址,用create在目的地址创建新文件,out_fd为open返回的描述符

如果返回-1,代表创建失败,提示错误*/

if ((out_fd = creat(argv[2], COPYMODE)) == -1)

oops("Cannot creat", argv[2]);

/*cp指令的动作就是读取一个文件的内容到存储器,在新的地址创建空白文件,再从存储器将内容写入新文件。

这里判断复制是否成功:

如果能读取顺利,而读取的位数和写的位数不同,是写错误;

如果读取失败,是读错误。*/

while ((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0)

if (write(out_fd, buf, n_chars) != n_chars)

oops("Write error to ", argv[2]);

if (n_chars == -1)

oops("Read error from ", argv[1]);

/*这里执行的是关闭文件的动作,in_fd和out_fd两个文件描述符

所指向的文件只要有一个关闭错误,就提示关闭错误。*/

if (close(in_fd) == -1 || close(out_fd) == -1)

oops("Error closing files", "");

}

/*这个是用来输出错误信息的函数*

时间: 2024-12-07 18:21:42

20145207《信息安全系统设计基础》第十周学习总结的相关文章

20135213——信息安全系统设计基础第十周学习总结

第八章异常控制流 一.学习目标 1. 了解异常及其种类2. 理解进程和并发的概念3. 掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,4.  理解数组指针.指针数组.函数指针.指针函数的区别5. 理解信号机制:kill,alarm,signal,sigaction6. 掌握管道和I/O重定向:pipe, dup, dup2 二.学习资源 1. 教材:第八章<异常控

信息安全系统设计基础第十周学习总结-吕松鸿

第八章 异常控制流 平滑:指在存储器中指令都是相邻的. 突变:出现不相邻,通常由诸如跳转.调用.和返回等指令造成. 异常控制流ECF:即这些突变. 关于ECF: 1.ECF是操作系统用来实现I/O.进程和虚拟存器的基本机制 2.应用程序通过使用一个叫做陷阱或者系统调用的ECF形式,向操作系统请求服务 3.ECF是计算机系统中实现并发的基本机制 4.软件异常机制——C++和Java有try,catch,和throw,C中非本地跳转是setjmp和longjmp 第一节 异常 异常是异常控制流的一种

20135210——信息安全系统设计基础第十周学习总结

Who命令 who 读取想要的信息到存储器中,再用标准输出函数打印到屏幕上,关闭文件. 查看登录前的用户 -who am i: 列出登录的用户 -who或-w. Unix系统中的错误处理 unix风格:例如fork函数和外套函数,返回值既包括错误代码,又包括有用的结果. if((pid = wait(NULL))<0) { fprintf(stderr,"wait error:%s\n",strerror(errno));//将errno设置为指向错误原因的代码 exit(0);

信息安全系统设计基础第十周学习总结

part1 1.如何查看当前登录的用户? -who am i 如何列出登录的用户? -who或-w 如何注销掉用户? -pkill -kill -t 用户名或-skill -KILL -v 用户名 2.目录操作 ①如何查看当前工作目录? -pwd ②如何改变当前工作目录进入下一级目录? -cd 下一级/ ③如何返回当前工作目录的父目录? -cd .. ④如何返回根目录? -cd / <<在Linux的目录结构中“.”表示当前目录,“..”表示当前目录的父目录,“/”表示根目录. ⑤当用户以个人

20135234马启扬-——信息安全系统设计基础第十周学习总结

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h> #define BUFFERSIZE 4096#define COPYMODE 0644 void oops(char *, char *); int main(int argc, char *argv[]){ int in_fd, out_fd, n_chars; char buf[BUFFERSIZE];

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155228 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 常见的存储技术 RAM 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的.静态 RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多.SRAM用来作为高速缓存存储 器,既可以在CPU芯片上,也可以在片下.DRAM用来作为主存以及图形系统的帧缓冲 区.典型地,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆 字节. SRAM将每

# 2018-2019-1 20165225《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165225<信息安全系统设计基础>第一周学习总结 教材学习内容总结 vim的用法 命令行输入vimtutor即可随时查看: linux系统下文件的转换: gcc hello.c => 编译hello.c源程序,出现a.out文件 gcc -o hello hello.c => 编译hello.c源程序,出现hello文件 od -tc -tx1 hello.c => 按单字节查看文件内容 gcc -E hello.c -o hello.i =&g

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

20145311 《信息安全系统设计基础》第一周学习总结

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有