zoukankan      html  css  js  c++  java
  • 系统IO

    首先来看看几个关键函数的原型:

    int open(char *filename, int flags, mode_t mode);
    int close(int fd);
    ssize_t read(int fd, void *buf, size_t count);
    ssize_t write(int fd, const void *buf, size_t count);
    off_t lseek(int fd, off_t offset, int whence);
    

    第七题:

    #include "csapp.h"
    
    int main(int argc, char *argv[])
    {
        int fd1, fd2, fd3;
        char *fname = argv[1];
        fd1 = Open(fname, O_CREAT|O_TRUNC|O_RDWR, S_IRUSR|S_IWUSR);
        Write(fd1, "pqrs", 4);	
    
        fd3 = Open(fname, O_APPEND|O_WRONLY, 0);
        Write(fd3, "jklmn", 5);
        fd2 = dup(fd1);  /* Allocates new descriptor */
        Write(fd2, "wxyz", 4);
        Write(fd3, "ef", 2);
    
        Close(fd1);
        Close(fd2);
        Close(fd3);
        return 0;
    }
    

    运行结果:

    pqrswxyznef
    

    这个地方需要注意的就是 fd1fd2共享了读写文件的位置, fd3使用的是追加的方式打开的文件

    第六题

    #include "csapp.h"
    
    int main(int argc, char *argv[])
    {
        int fd1, fd2, fd3;
        char c1, c2, c3;
        char *fname = argv[1];
        fd1 = Open(fname, O_RDONLY, 0);
        fd2 = Open(fname, O_RDONLY, 0);
        fd3 = Open(fname, O_RDONLY, 0);
        dup2(fd2, fd3);
    
        Read(fd1, &c1, 1);
        Read(fd2, &c2, 1);
        Read(fd3, &c3, 1);
        printf("c1 = %c, c2 = %c, c3 = %c
    ", c1, c2, c3);
    
        Close(fd1);
        Close(fd2);
        Close(fd3);
        return 0;
    }
    

    文件abcde.txt 里面的内容为abcde

    运行结果:

    fd2fd3共享了读取文件的光标的位置,所以结果是这样的

  • 相关阅读:
    运算符
    格式化输出
    while循环
    if 判断语句
    Swift # 字典
    Swift # 数组
    Swift # 字符串
    [ Swift # 函数 ]
    [ Bubble Sort ]& block
    数据结构 # 二叉树/堆/栈
  • 原文地址:https://www.cnblogs.com/ourfor/p/system_io.html
Copyright © 2011-2022 走看看