I/O操作和进程一个案例

来源:互联网 发布:单片机应用论文 编辑:程序博客网 时间:2024/05/19 00:42

标准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);    //输出第二个字符    }



0 0