CSAPP3e-学习笔记-第十章
Linux 系统下的 I/O 进程,其标准输出描述符的值是(B)
A. $0$
B. $1$
C. $2$
D. $-1$
在头文件中,标准输出描述符所对应的预定义常量是(B)
A.STDIN_FILENO
B.STDOUT_FILENO
C.STDERR_FILENO
D.STDFILE_FILENO
每个 C 程序开始时都有三个打开的流(在 stdio.h
中定义)
stdin
(standard input) 标准输入stdout
(standard output) 标准输出stderr
(standard error) 标准错误
1 |
|
Linux系统中文件类型包含下面哪些?(A B C D)
A. 普通文件
B. 目录
C. 套接字
D. 符号链接
每个 Linux 文件都有一个类型来表明它在系统中的角色:
类型 | 英语 | 作用 |
---|---|---|
普通文件 | Regular file | 包含任意数据 |
套接字 | Socket | 用来与另一个进程进行跨网络通信的文件 |
目录 | Directory | 一组链接文件的索引 |
命名通道 | Named pipes (FIFOs) | |
符号链接 | Symbolic links | |
字符和块设备 | Character and block devices |
要读取某个目录的内容,应该使用函数(A B C)
A.opendir
B.readdir
C.closedir
D.writedir
文件描述符
在 Linux 下一切皆文件,文件描述符是内核为了高效的管理已经被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件。所有执行 I/O 操作的系统调用都是通过文件描述符完成的。而系统调用函数 open
的返回值就是文件描述符 fd
。
1 |
|
普通文件
- 普通文件包含任意数据
- 应用程序常常要区分文本文件(text files)和二进制文件(binary files)
- 文本文件是只包含 ASCII 或 Unicode 字符的普通文件
- 二进制文件是所有其他文件
- 比如目标文件,JPEG 图像文件等等
- 内核并不知道两者之间的区别
- Linux 文本文件是文本行的序列
- 文本行是一个字符序列,以一个新行符 (
\n
)结束- 新行符为
0xa
,与 ASCII 的换行符 (LF
) 是一样的
- 新行符为
- 文本行是一个字符序列,以一个新行符 (
- 其他系统中的行结束标志
- Linux 和 Mac 操作系统 :
\n
(0xa
)- 换行 (
LF
)
- 换行 (
- Windows 和 因特网络协议:
\r\n
(0xd
0xa
)- Carriage return (
CR
) followed by line feed (LF
) 回车换行
- Carriage return (
- Linux 和 Mac 操作系统 :
目录
- 目录是包含一组链接的文件
- 每个链接将一个文件名映射到一个文件
- 每个目录至少含有两个条目
.
是到该目录自身的链接..
是到目录层次结构中父目录的链接
如何使用
dup2
将标准输入重定向到描述符5?(A)
A.dup2(5, 0)
B.dup2(0, 5)
C.dup2(1, 5)
D.dup2(5, 1)
dup2(oldfd, newfd)
函数
复制描述符表表项 oldfd
到描述符表表项 newfd
, 覆盖描述符表表项 newfd
以前的内容。
调用 dup2(4, 1)
:使得 fd = 1 (stdout)
指向 fd = 4
所指向的磁盘文件。
dup2(A, B) == 复制描述符 A 到描述符 B == 描述符 B 指向描述符 A