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

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

教材学习内容总结

第10章 系统级I/O

错误处理
  1. 错误处理风格
    (1)Unix风格
    遇到错误后返回-1,并且将全局变量errno设置为指明错误原因的错误代码;
    如果成功完成,就返回有用的结果。
    (2)Posix风格
    返回0表示成功,返回非0表示失败;
    有用的结果在传进来的函数参数中。
    (3)DNS风格
    有两个函数,gethostbyname和gethostbyaddr,失败时返回NULL指针,并设置全局变量h_errno。
    (4)错误报告函数
void unix_error(char *msg) /* unix-style error */
{
    fprintf(stderr, "%s: %s\n", msg, strerror(errno));
    exit(0);
}
/* $end unixerror */

void posix_error(int code, char *msg) /* posix-style error */
{
    fprintf(stderr, "%s: %s\n", msg, strerror(code));
    exit(0);
}

void dns_error(char *msg) /* dns-style error */
{
    fprintf(stderr, "%s: DNS error %d\n", msg, h_errno);
    exit(0);
}

void app_error(char *msg) /* application error */
{
    fprintf(stderr, "%s\n", msg);
    exit(0);
}
  1. 错误处理包装函数
    (1)Unix风格
    成功时返回void,返回错误时包装函数打印一条信息,然后退出。
void Kill(pid_t pid, int signum) 
{
    int rc;

    if ((rc = kill(pid, signum)) < 0)
    unix_error("Kill error");
}

(2)Posix风格
成功时返回void,错误返回码中不会包含有用的结果。

void Pthread_detach(pthread_t tid) {
    int rc;

    if ((rc = pthread_detach(tid)) != 0)
    posix_error(rc, "Pthread_detach error");
}

(3)DNS风格

struct hostent *Gethostbyname(const char *name) 
{
    struct hostent *p;

    if ((p = gethostbyname(name)) == NULL)
    dns_error("Gethostbyname error");
    return p;
}

视频学习内容总结

ls命令

  • ls功能:读取文件名和文件属性,按照字典序排序后输出。
  • 常用的命令行选项:
ls -l   以长格式的形式查看当前目录下所有可见文件的详细属性
ls -a   列出的内容包含以“.”开头的文件
ls -lu  最后访问时间
ls -s   以块为单位的文件大小
ls -t   按时间排序
ls -F   显示文件类型

ls -l

  • ls -l 的输出每行都包含7个字段
模式              每行的第一个字符表示文件类型,“-”代表普通文件,“d”代表目录文件。
链接数            指该文件被引用的次数
文件所有者        指出文件所有者的用户名
组                指出文件所有者所在的组
大小              显示文件的字节数
最后修改时间      文件的最后修改时间
文件名            文件名
  • ls -l可以显示当前目录下目录或文件的详细属性信息

    cp

  • 查看帮助文档man cp
    885499-20161120213428529-1186519175.png
  • cp的作用就是读取一个文件的内容到存储器,在新的地址创建空白文件,再从存储器将内容写入新文件。(如下图把ls1.c复制,存为lc.c文件)
    885499-20161120213515138-1716141813.png

    ls1和ls2

  • ls1程序的作用是在当前目录显示文件名(未带参数直接显示,带参数的存入argc)
    885499-20161120213557373-958858606.png
  • ls2不仅显示了文件名,还用来显示文件的详细信息,比如用户名、群组名、大小、创建时间、读写权限等。
    885499-20161120213720685-841510972.png

    echostate.c和setecho.c

    echostate.c
  • 功能:查看在命令行中输入命令时是否可见,可见返回1,否则返回0
    885499-20161120213804107-488632282.png

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

    ioctl函数

  • ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。
  • ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。
  • 查看帮助文档man isatty man ioctl
  • isatty:判断一个文件描述符是否指向一个终端
    885499-20161120214000263-36836017.png
  • ioctl:控制驱动器
    885499-20161120214030826-911187871.png
  • 程序运行结果
    885499-20161120214058263-1627296189.png

    filesize

  • filesize代码用st_size成员来计算文件的字节数大小,gcc后有一个警告,调用正常。
    885499-20161120214142092-477174215.png

    fileinfo

  • fileinfo代码这个功能用来实现显示文件信息,建立了一个stat数据结构。先判断命令是否有操作数,有的话才能继续进行下去,如果没有报错就打印出来相关文件信息,报错就用perror将报错信息打印出来。
    885499-20161120214510498-1237250224.png

    spwd命令

  • spwd的功能是列出当前目录。
    885499-20161120214554232-629629912.png

    who命令

  • 这个代码的思想是,从UTMP_FILE文件中读取想要的信息到存储器中,然后再用标准输出函数打印到屏幕上,最后关闭文件。
    -程序运行结果
    885499-20161120214638482-1060913993.png
    885499-20161120214729998-896889064.png

本周代码托管截图

885499-20161120214933607-338783957.png
885499-20161120214945342-6468259.png
885499-20161120214956904-1203028559.png
885499-20161120215007107-166105507.png

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/220/20
第二周200/4002/418/38
第三周100/5001/510/48
第四周250/7501/610/58
第五周100/8501/710/68
第六周100/9501/812/80
第七周200/11501/912/92
第八周124/12742/1110/102
第九周205/14792/135/107
第十周646/21252/159/116

参考资料

转载于:https://www.cnblogs.com/yx20145312/p/6083700.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值