文章目录
I.一点前提
关于csapp.h和csapp.c的使用,编译步骤如下:
1.在工作目录下建立所需的文件csapp.h csapp.c xxx.c
2.编译csapp.c和xxx.c,<以csapp.c为例>命令为gcc -c csapp.c,生成csapp.o
3.链接目标文件csapp.o和xxx.c,命令为gcc -o 可执行文件名<如main> csapp.o xxx.o -lpthread(-lpthread必带,csapp.c中有关线程部分)
II.具体实例
ffiles1.c
#include "csapp.h"
int main(int argc, char *argv[])
{
int fd1, fd2, fd3;
char c1, c2, c3;
char *fname = argv[1];
fd1 = Open(fname, O_RDONLY, 0);
fd2 = Open(fname, O_RDONLY, 0);
fd3 = Open(fname, O_RDONLY, 0);
dup2(fd2, fd3);
Read(fd1, &c1, 1);
Read(fd2, &c2, 1);
Read(fd3, &c3, 1);
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
Close(fd1);
Close(fd2);
Close(fd3);
return 0;
}
编译链接后,生成了名为main的可执行文件
下面用到的abcde.txt文件是这个亚子的
一,一点理解
三个文件描述符fd1,fd2,fd3,都有各自的打开文件表表项,各自的文件位置,执行语句dup2(fd2, fd3),fd2覆盖fd3,此时f2,f3指向同一个打开文件表项,f3以f2打开读取后的位置为起始,继续读取。
二,dup2与dup
dup/dup2:进行文件描述符的重定向即创建一个oldfd的副本。
dup:最低编号、未被使用的文件描述符是oldfd的一份拷贝。
dup2:newfd是oldfd的一份拷贝。
返回值:成功(newfd); 失败(