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
總結
以上是生活随笔為你收集整理的2018-2019-1 20165335 《信息安全系统设计基础》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货 | 一文带你搞定Python 数据
- 下一篇: 对于读取PDF模板表单,中文无序问题