zoukankan      html  css  js  c++  java
  • 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

    结论:

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

    疑问:

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

  • 相关阅读:
    FreeMarker常用语法学习
    Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作-------sql方式
    Oracle Partition 分区详细总结
    oracle 当中,(+)是什么意思
    SQL中EXISTS的用法
    JS return false 与 return true
    Merge into语句用法及其效率问题
    几种设置表单元素中文本输入框不可编辑的方法
    Oracle存储过程基本语法
    UNIX网络编程——Socket粘包问题
  • 原文地址:https://www.cnblogs.com/cation/p/2818098.html
Copyright © 2011-2022 走看看