• UNIXLINUX 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

    结论:

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

    疑问:

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

  • 相关阅读:
    自动封箱和拆箱
    关于Java的一道内存的题目
    volatile关键字
    阶乘尾零
    Java之final的解析
    从1到n整数中1出现的次数
    最小安装雷达数量
    二叉树重建
    最短路径—Dijkstra算法
    PAT A1063——set的常见用法详解
  • 原文地址:https://www.cnblogs.com/cation/p/2818098.html
Copyright © 2020-2023  润新知