标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构的指针,对于每个ANSIC程序开始时,都有三个打开的流stdin,stdout
,stderr,分别对应于标准输入,输出,错误。类型为FILE的流是对文件描述符和流缓冲区抽象,流缓冲区的目是为了使得开销较高的系统I/O系统调用尽量可能少,例如:
一个程序如果反复调用标准I/O的getc函数,每次调用返回文件的下一个字符,当第一次掉哟个getc函数时,库通过调用一次read函数填充缓冲区,然后将缓冲区 的第一个字符
返回给应用程序,只要缓冲区还有未读的字节,接下来对getc的调用就能直接从缓冲区得到服务。
1.进程和文件I/O操作
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<wait.h>
#include<errno.h>
#include<signal.h>
#include<sys/types.h>
#include<fcntl.h>
#include<sys/stat.h>
//open write read lseek close 函数所在的头文件
pid_t Fork(void)
{
pid_t pid;
if((pid=fork())<0)
{
perror("Fork error");
}
return pid;
}
int main()
{
int fd;
char c;
fd=open("/home/yy/foobar.txt",O_RDONLY,0);
if(Fork()==0)
{
//子进程会继承父进程的描述符表,以及所有进程共享的同一个打开的文件夹
read(fd,&c,1);
//读文件一个第一个字节
exit(0);
}
wait(NULL);
//再次读的时候文件位置会+1
read(fd,&c,1);
printf("c=%c\n",c);
//输出第二个字符
}