标准IO库

文件打开和关闭函数
#include <sys/types.h>
#include<sys/stat.h>
#include <fcntl.h>
int fd=open(char* filename, int flags, mode_t mode);
返回: 若成功返回新文件描述符,若出错为-1
int close(int fd);
返回: 若成功则为>0. 若出错为-1.

⽂件定位与⽂件内容随机读取
#include <unistd.h>
#include <sys/types.h>
off_set lseek(int fd, off_t offset , int whence);

练习


内核文件

打开文件内核
下⾯的程序fdtest. c在启动时,⽂件描述符0、1、2已经分配给stdin、stdout、stderr三台设备,
从3以后的⽂件描述符为空闲,三个open函数以读写⽅式打开⽂件。假设⽤户对当前⽬录具有写权
限,则open函数调⽤都能成功,open函数依次选取下⼀个空闲的⽂件描述符,分配给⽂件fl 、f2、
f3, 因此输出为“ fd1=3 fd2=4 fd3=5
#include "wrapper.h"
int main()
{
int fd1,fd2,fd3;
fd1=Open("f1",O_RDWR|O_CREAT,0777);
fd2=Open("f2",O_RDWR|O_CREAT,0777);
fd3=Open("f3" ,O_RDWR|O_CREAT,0777);
printf("fd1=%d fd2=%d fd3=%d\n",fd1,fd2,fd3);
Close(fd1);
Close(fd2);
Close(fd3);
}
数据结构共享
打开同一文件两次


内核打开文件数据变化


函数open/close/dup/dup2执⾏后⽂件描述符表的变化情况


练习

fd1=3 fd4=4 fd3=5 fd4=0

loc1=10 ch=k, loc2=27


fd2=4
fd3=0
fd3=0是因为dup函数会返回最小的未使用的文件描述符。当你关闭了标准输入(文件描述符0),那么0就成了最小的未使用的文件描述符,所以dup函数会返回0。这样,fd3就和标准输入指向了同一个文件。如果你想让fd3指向一个不同的文件,你可以使用dup2或dup3函数,它们可以让你指定新的文件描述符的值。