2018-2019-1 20165335 《信息安全系统设计基础》第六周学习总结

一 .教材学习总结

 系统I/O操作:

    系统的所有的I/O操作就是将设备数据复制到主要存储。

    所有的I/O设备都是将模型转化为文件。

    打开文件: 一个应用程序先要求内核打开一个文件,内核返回一个数字表示响应。

    每一个进程开始打开时候,打开三个文件

      1.标准输入 标记0

      2. 标准输出 标记1

      3. 标准错误 标记2

i/o口与文件图解:

 

  文件描述:

  文本文件就是只含有ASCII吗和Unicode的字符

  Linux文本文件包含文本行序列

  每一个文件目录都包括最少2个条目

  linux文件序列图解:

 

rio_read函数解析:

  对于一个应用程序,rio——read函数和Linux基本类似,出错时返回eof

  调用rio可以简单实现内存与文件的传输数据

 计算机CPU对内存处理图解:

 

Linux自带函数:

void rio_readinitb(rio_t *rp, int fd)

{
rp->rio_fd = fd;
rp->rio_cnt = 0;
rp->rio_bufptr = rp->rio_buf;

return;
}

 

static ssize_t rio_read(rio_t *rp, char *usrbuf, size_t n)

{
int cnt;

while(rp->rio_cnt <= 0)
{
rp->rio_cnt = read(rp->rio_fd, rp->rio_buf, sizeof(rp->rio_buf));
if(rp->rio_cnt < 0)
{
if(errno != EINTR)
return -1;
}
else if(rp->rio_cnt == 0)
return 0;
else
rp->rio_bufptr = rp->rio_buf;
}

cnt = n;
if((size_t)rp->rio_cnt < n)
cnt = rp->rio_cnt;
memcpy(usrbuf, rp->rio_bufptr, n);
rp->rio_bufptr += cnt;
rp->rio_cnt -= cnt;

return cnt;
}


ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n)
{
size_t leftcnt = n;
ssize_t nread;
char *buf = (char *)usrbuf;

while(leftcnt > 0)
{
if((nread = rio_read(rp, buf, n)) < 0)
{
if(errno == EINTR)
nread = 0;
else
return -1;
}
leftcnt -= nread;
buf += nread;
}

return n-leftcnt;
}


ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
size_t n;
int rd;
char c, *bufp = (char *)usrbuf;

for(n=1; n<maxlen; n++)
{
if((rd=rio_read(rp, &c, 1)) == 1)
{
*bufp++ = c;
if(c == '\n')
break;
}
else if(rd == 0)
{
if(n == 1)
return 0;
else
break;
}
else
return -1;
}
*bufp = 0;

return n;
}


ssize_t rio_writen(int fd, void *usrbuf, size_t n)
{
size_t nleft = n;
ssize_t nwritten;
char *bufp = (char *)usrbuf;

while(nleft > 0)
{
if((nwritten = write(fd, bufp, nleft)) <= 0)
{
if(errno == EINTR)
nwritten = 0;
else
return -1;
}
bufp += nwritten;
nleft -= nwritten;
}

return n;
}

 二. 本周错误总结:

下面说法正确的是()
A .
Linux内核使用的file table 所有的进程共享的。
B .
不同进程打开同一个文件的文件描述符必须一样。
C .
使用dup2 把标准输入重定向到描述符7 dup2(7,0)

D .
使用dup2 把标准输入重定向到描述符7 dup2(0,7)

E .
ls > foo.txt 是输出重定向
F .
类型为FILE的流是对文件描述符和流缓冲区的抽象。

答案:ACEF

Unix/Linux中,对于代码fd=open("foo",O_WRONLY,0766),umask=022,下面说法正确的是()
A .
进程对foo是只写的
B .
同组成员能写foo
C .
使用者可以执行foo
D .
任何人都可以写foo

答案:AC

 

转载于:https://www.cnblogs.com/x20165335/p/9904102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值