UNIX-LINUX C语言编程->实验室->多次打开文件实验

本实验基于《unix-linux编程实践教程》第二章习题2.6

实验说明:

unix允许一个文件同时被多个进程打开,也允许一个进程同时打开好几个文件,做多次打开文件的实验:

(1)以读的方式打开文件

(2)以写的方式打开文件

(3)再次以读的方式打开文件

这时有三个文件描述符,接下来

(4)从第一个文件描述符中读取20字节,显示读到的内容

(5)向第二个文件描述符写入"testing 123..."

(6)从第三个文件描述符读出20字节,显示读到的内容

代码:

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>


int main(int ac,char *av[])
{
    int fd1;
    int fd2;
    int fd3;
    char *buf;
    buf = malloc(30000);
    /*以读的方式打开文件*/
    if((fd1 = open(av[1],O_RDONLY)) == -1)
    {
        perror(av[1]);
        exit(1);
    }
    /*以写的方式打开文件*/
    if((fd2 = open(av[1],O_WRONLY)) == -1)
    {
        perror(av[1]);
        exit(1);
    }
    /*再以读的方式打开文件*/
    if((fd3 = open(av[1],O_RDONLY)) == -1)
    {
        perror(av[1]);
        exit(1);
    }
    /*从第一个文件描述符读20字节*/
    if(read(fd1,buf,20) == -1)
    {
        perror(av[1]);
        exit(1);
    }
    printf("%s",buf);
    printf("\n");
    /*从第二个文件描述符写入“testing 123...”*/
    if(write(fd2,"testing 123...",sizeof("testing 123...")) != sizeof("testing 123..."))
    {
        perror(av[1]);
        exit(1);
    }
    /*从第三个文件描述符读出20字节*/
    if(read(fd3,buf,20) == -1)
    {
        perror(av[1]);
        exit(1);
    }
    printf("%s",buf);
    printf("\n");
}

被读文件内容:

1231231231231231231231231231233123123131231

结果:

终端显示:

12312312312312312312
testing 123...

被读文件内容:

testing 123...^@1231231231231233123123131231

结论:

多次打开文件后,虽然具有个多文件描述符,但所有文件描述符都指向同一个文件

疑问:

在向第二个文件描述符中插入字符串时,怎么还插入了一个"^@"

 

posted @ 2012-12-14 15:16  布兰姥爷  阅读(1695)  评论(0编辑  收藏  举报