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

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

时间:2015-11-08 15:02:15      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

怎样学习系统编程(利用Linux学习Linux编程)

1 分析实用程序
/bin, /usr/bin, /usr/local/bin
学习使用工具,分析工具,了解功能和原理
2 学习系统调用
函数和系统调用本质上都是函数。不同的库,不同的头文件
分析需要哪些系统调用,学习系统调用的使用方法:参数?返回值?
3 编程实现
利用上面的原理和一组协同工作的系统调用,自己编程实现使用程序的功能
或积极主动抄代码,学习那些系统调用是协同工作的

C语言的学习可以参考这个思路,实现标准库
伴随我们学习经常要问的三个问题:
能做什么?
如何实现?
自己如何编写?

比如说Linux操作系统
能做什么?
登录-运行程序-注销
如何登录?如何获取程序名?如何运行程序?
目录操作:目录树:ls,cd,pwd,mkdir,rmdir
目录树如何组织的?目录存在哪?什么是当前目录?
文件操作:cat, more/less/pg, cp, mv, lpr
文件数据如何存储?如何复制,移动,改名?文件名存在哪?
文件访问控制:ugo
如何设置?

从OS的角度看: 网络游戏
通信
协作
网络访问
bc/dc---->网络 B/S

标准I/O 学习示例:more 

能做什么?用一下

使用方法
more filename
more < filename
command | more
如何实现?
伪代码:

如果用户没有输入文件名
输出键盘输入内容
对整个文件
显示24行
提示用户选择 空格 回车 q
如果用户选择空格
显示下24行
如果用户选择回车
显示下一行
如果用户选择 q
退出

函数调用:
fopen/fclose
stdin stdout stderr
fgets/fputs
getchar/putchar
printf("\033[7m more? \033[m")

自己编写:
如何判断读到文件尾部了?
feof
fgets的返回值是0
fseek 与文件读写位置





问题:
选择都要回车
文字和反白more一起上滚
百分比
适应窗口
重定向: who | more, ls |more
/dev/tty(流与文件)




系统调用:文件I/O 如何用Linux学习系统编程
多用户系统如何知道谁在使用系统?who
who能做什么?使用一下
man who (info who; who --help)
如何实现who?

阅读ManPages
man man
搜索ManPages
man -k
man -k XXX | grep -i YYY
阅读头文件
参阅see also

man who
man -k utmp
man 5 utmp
utmp.h
grep -i XXX -nr /usr/include

UTMP_FILE
struct utmp
#define ut_name ut_user
ut_line 
#define ut_time ut_tv.tv_sec


伪代码:

打开utmp文件
针对文件
读取一条记录
显示记录
关闭文件


哪些系统调用?
man -k file | grep -i read
see also

open/read/close

struct utmp s;
read( fd, &s, sizeof(s));


man 
cf fopen fread fclose

自己编写who:
read: return value
/var/run/utmp
var/run/unp




问题:空白记录
ut_type
时间转换
man -k time | grep -i transform (trans) 
asctime(3) 
ctime(3) 
localtime(3)
man -k time | grep -i convert


查找关键字:至少汉语有想法
转换

时间格式
man -k time | grep -i format
strftime(3)



如何复制文件?cp
cp能干什么?
cp src dst

如何实现cp?
open/close

open(fff, O_WRONLY|O_CREAT,0644)
creat(fff, 0644);
n = read(fd, buf, BUFSIZE);//#define BUFSIZE 4096
write(fd, buf, n);

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

自己编写cp:





系统调用错误处理:
错误种类:errno
显示错误消息:perror(3)
错误处理封装函数
fork()

if((pid = fork()) < 0)
unix_error("fork error");
return pid;

学有余力者:
ac last cat head tail od dd





read/write可以读取文件内容,如何读取文件名和文件属性?ls

ls能干什么?
ls
ls -l
ls -a 
ls -lu:最后访问时间
ls -s:以块为单位的文件大小
ls -t:按时间排序
ls -F:显示文件类型

列出文件目录
显示文件信息
如何列出文件目录?
如何显示文件属性?
如何判断一个名字是文件还是目录?

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

如何实现ls?
man -k direct
man -k direct | grep -i read
man -k direct | grep -i entry

readdir
see also: opendir closedir
总结:代码模式
fopen fread/fwrite fclose
open read/write close
opendir readdir closedir

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

自己编写ls:






传入参数,显示任意目录: ls /tmp; ls /; ls /dev
分栏
.开头隐含文件:-a
排序:man -k sort


代码库:DRY
xxx_uitl.h xxx_util.c
出错处理,参数处理,常用结构...
xxx_datastru.h xxx_datastru.c
链表,双向链表
树,图。。。
xxx_algorith.h xxx_algorthm.c



ls -l能做什么?
显示文件信息:模式(文件类型file(1),访问控制),链接数,文件所有者,组,大小,最后修改时间,文件名

如何实现ls -l?
man -k file | grep -i infomation (status, property, attribute)

stat(1) stat(2)
struct stat
最后修改时间:st_mtime ctime
模式:st_mode
type ugs rwx rwx rwx

八进制掩码
struct stat info;
if ((info.st_mode & 0170000) == 0040000)
printf("这是一个目录\n");

文件类型宏
#define S_ISDIR(m) (((m)&0170000)) == (0040000))

struct stat info;
if (S_ISDIR(info.st_mode))
printf("这是一个目录\n");

访问控制属性?比如说本人能不能写?如何定义宏?
S_ISREG(mod) ‘-‘
S_ISDIR(mode) ‘d‘ 
S_ISCHR(mode) ‘c‘ 
S_ISBLK(mode)) ‘b‘ 


UID/GID 
/etc/passwd
getpwuid(3)
struct passwd

/etc/group
getgrgid(3)
struct group
自己编写ls -l: ls2.c
stat(2) struct stat
getpwuid(3) struct passwd
getgrgid(3) struct group


记录计数
按文件名排序 qsort




文件属性修改与open/creat

open/creat umask(1) umask(2)

chmod(1) chmod(2)
chown(1) chgrp(1) chown(2)
touch(1) utime(2)
mv(1) rename(2)


学有余力:tree chmod file chown chgrp finger touch



tree ls-R
文件包含数据,目录是文件列表,目录构成目录树。
文件在目录中什么意思?
用户的主目录(home)是什么意思?
文件系统(解决的问题参考教材)
路径:绝对路径,相对路径。pwd
用户眼中的文件系统
目录和文件:构成目录树
目录命令:
. .. /
mkdir
rmdir
-p
mv
cd
pwd
...
练习:构建一棵目录树
文件命令:
cp
-r
cat
mv
rm
-r
ln
ls
...
目录树命令
tree
ls -R
chmod -R
du
find:注意与grep的区别
...

目录树的深度??

思考:
文件系统形成目录树,操作系统提供相应的操作命令来协同工作
目录是什么?
如何知道文件所处的目录?
切换目录(cd)是什么意思?
pwd如何自知道你处的目录?

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

标签:

原文地址:http://www.cnblogs.com/mqy123/p/4947213.html

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