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

一、who命令

who命令的工作流程是:打开utmp文件,针对文件,读取一条记录,显示记录,关闭文件

1.查看登录前的用户

-who am i

2.列出登录的用户

-who或-w

3.注销用户

二、附录A

1.系统级函数调用使用三种不同风格的返回错误:Unix风格、Posix风格、DNS风格

a.Unix风格的错误处理

遇到错误返回-1,函数成功完成就返回有用的结果

b.Posix风格的错误处理

只用返回值表明成功(0)或者失败(非0)。任何有用的结果都返回在通过引用传递进来的函数参数中。

c.DNS风格的错误处理

失败时返回Null指针,并且设置全局变量h_errno

三、代码理解

1.

include "csapp.h"

int main(int argc, char **argv)
{
int n;
rio_t rio;
char buf[MAXLINE];

Rio_readinitb(&rio, STDIN_FILENO);//连接标准输入和rio地址
while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) //当成功返回时,将rio中的内容拷贝到存储器位置buf中,最多读maxline-1
Rio_writen(STDOUT_FILENO, buf, n);//把存储器位置中的数据拷贝到标注输出中。
exit(0);

}
先连接标准输入和地址rio,再根据返回值判断是否成功将rio中的一行内容拷贝到了buf中,如果是再把这一行拷贝到标准输出中,即可实现一次一行的从标准输入拷贝一个文本文件到标准输出。

2.

define RIO_BUFSIZE 8192

typedef struct {
int rio_fd; /* descriptor for this internal buf /
int rio_cnt; /
unread bytes in internal buf */
char rio_bufptr; / next unread byte in internal buf /
char rio_buf[RIO_BUFSIZE]; /
internal buffer */
} rio_t;

void rio_readinitb(rio_t rp, int fd)
{
rp->rio_fd = fd;
rp->rio_cnt = 0;
rp->rio_bufptr = rp->rio_buf;
}
由代码可以看出,rio_t数据结构的组成部分有文件描述符,缓存区中还没有读过的数值,下一个需要读的字节,文本行。在rio_readinitb函数中,创建了一个读缓存区,把文件描述符赋值,还没有读过的数值是0,下一个要读的字节就是文本行的起始,这代表这个读缓存区是空的。#define RIO_BUFSIZE 8192
typedef struct {
int rio_fd; /
descriptor for this internal buf /
int rio_cnt; /
unread bytes in internal buf */
char rio_bufptr; / next unread byte in internal buf /
char rio_buf[RIO_BUFSIZE]; /
internal buffer */
} rio_t;

void rio_readinitb(rio_t *rp, int fd)
{
rp->rio_fd = fd;
rp->rio_cnt = 0;
rp->rio_bufptr = rp->rio_buf;
}
由代码可以看出,rio_t数据结构的组成部分有文件描述符,缓存区中还没有读过的数值,下一个需要读的字节,文本行。在rio_readinitb函数中,创建了一个读缓存区,把文件描述符赋值,还没有读过的数值是0,下一个要读的字节就是文本行的起始,这代表这个读缓存区是空的。

四、参考资料

1.《深入理解计算机系统》

2.20135202博客http://www.cnblogs.com/20135202yjx/p/4947272.html

原文地址:https://www.cnblogs.com/yswysw/p/4960270.html