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

结论:

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

疑问:

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

 

转载于:https://www.cnblogs.com/cation/archive/2012/12/14/2818098.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值