20135337——信息安全设计基础第九周学习笔记

这次实践内容是学习ls、who、echostate、filesize、fileinfo、spwd、testioctl等命令的具体实现功能的c代码

cp

1.功能: 复制文件或目录

2.说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

3.将文件file1复制成文件file2(cp file1 file2)

4.fprintf

格式化输出到一个流/文件中

头文件 #include<stdio.h>

函数原型  int fprintf(FILE *stream,char *format,[argument])

5.open

打开一个文件

头文件 #include<fcntl.h>

函数原型 int fd = open(char *name,int how)

6.write

将内存中的数据写入文件

头文件 #include<unistd.h>

7.create

创建/重写一个文件

头文件 #include<fcntl.h>

函数原型 int fd = creat(char *filename,mode_t mode)

8.read

将数据读到缓冲区

头文件 #include<unistd.h>

函数原型 ssize_t numread = read(int fd,void *buf,size_t qty)

9.close

关闭一个文件

头文件 #include<unistd.h>

函数原型   int result = close(int fd)

cp 复制(复制为ls3文件)

ls

1.功能:列出目标目录中所有的子目录和文件。

2.示例:

 1.列出/home文件夹下的所有文件和目录的详细资料
	命令:ls -l -R /home
 2.列出当前目录中所有以“t”开头的目录的详细内容
	命令:ls -l t* 
 3.只列出文件下的子目录
	列出 /opt/soft 文件下面的子目录
	命令:ls -F /opt/soft |grep /$  
 	
	列出 /opt/soft 文件下面的子目录详细情况
	命令:ls -l /opt/soft | grep "^d"
 4.列出目前工作目录下所有档案及目录;目录于名称后加"/", 可执行档于名称后加"*" 
	命令:ls -AF
 5.计算当前目录下的文件数和目录数
	命令:
		ls -l * |grep "^-"|wc -l ---文件个数  
		ls -l * |grep "^d"|wc -l    ---目录个数
 6.列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归
	命令:find $PWD -maxdepth 1 | xargs ls -ld

ls 用来显示文件的详细信息(用户名,群组名,大小,创建时间,读写执行权。ls.tar视频也有讲到)

who

1.实现原理是,通过查找记录登陆信息的文件来获取系统中登陆过用户的信息。

who 读取想要的信息到存储器中,再用标准输出函数打印到屏幕上,关闭文件

file

1.filesize  st_size计算文件的字节数大小

2.fileinfo 显示文件信息

 (1)用来实现显示文件信息,建立了一个stat数据结构。

 (2)要先判断命令是否有操作数

 

spwd

spwd 列出当前目录

testioctl

ioctl函数

ioctl 用于向设备发控制和配置命令 ,有些命令需要控制参数,这些数据是不能用read / write 读写的,称为Out-of-band数据。也就是说,read / write 读写的数据是in-band数据,是I/O操作的主体,而ioctl 命令传送的是控制信息,其中的数据是辅助的数据。

testioctl ioctl 命令传送的是控制信息,其中的数据是辅助的数据。

echostate setecho

1.setecho

设置回显位的状态,命令行参数为y则开启,否则关闭。
 1.标准输入的文件描述符为0.
 2.使用tcgetattr()函数和termios结构体可获得标准输入的属性。
 3.使用tcsetattr()函数和termios结构体可以将更改后的属性设置重新写回标准输入。

2.echostate

读取驱动设置并显示回显位的状态。
 1.标准输入的文件描述符为0
 2.使用tcgetattr()函数和termios结构体可以读取到设备的属性
 3.回显位状态放置在termios.c_lflag中

echostate setecho

man -k

如:通过man查看who

遇到问题

1.实践代码中cp1.c是把一个文件复制到另一个文件中。但是我开始复制到了文件夹下则出现了问题.

2.setecho当yes时,为正常;当no时,命令行显示不出我所敲的内容,才明白当echo is on的时候,输入的指令不可见,echo也被设置为了关闭状态。当我要继续执行其他文件时,必须再次设置成yes的状态,将会再次显示输入指令内容。

3.通过运行testioctl的结果,我以为是用于计算行列数,但,不是。

解决:ioctl 命令传送的是控制信息,其中的数据是辅助的数据。

如:#include <sys/ioctl.h>
int ioctl(int fd, int request,..);
若出错则返回-1,若成功则返回其他值,返回值也是取决于request。(fd是某个设备的文件描述符。request 是ioctl 的命令,可变参数取决于request ,通常是一个指向变量或结构体的指针。)

参考资料

《深入理解计算机系统》
ls.tar视频
http://www.cnblogs.com/peida/archive/2012/10/23/2734829.html
http://blog.163.com/postmessage%40126/blog/static/30614210201032343549335/
http://www.cnblogs.com/cation/archive/2013/03/06/2945464.html

原文地址:https://www.cnblogs.com/zzzz5/p/4960647.html