码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-11-20 18:47:32      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:github   struct   缓冲区   输出   lib   设计   成员   第一个   oschina   

编写一个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("\n");
 
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:\n", *++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\n", dirname);
else
{
while ( ( direntp = readdir( dir_ptr ) ) != NULL )
printf("%s\n", direntp->d_name );
closedir(dir_ptr);
}
}
 
 

 



5技术分享

 

代码托管链接

 
 

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

标签:github   struct   缓冲区   输出   lib   设计   成员   第一个   oschina   

原文地址:http://www.cnblogs.com/besti145306/p/6082995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!