zoukankan      html  css  js  c++  java
  • 文件IO

    1. OPEN

    umask=2, 666&(~2)=664

     

     2. CLOSE

     

    3. Read

    4. write

    模拟 cat:

     

    需求:

    写hello到一个文件,然后读取,输出到终端。

     若这样写,read不到,因为写hello后将到文件末尾。

    需要lseek

     

    lseek 计算文件大小

    少了一句: close(fd)!!!!

    lseek 拓展文件

    阻塞与非阻塞

     通过 O_NONBLOCK实现非阻塞

     非阻塞的情况下read返回-1,但是需要判断errno的值来确定是否是非阻塞。

    另一种方法设置非阻塞, 通过fcntl()函数

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    int main()
    {
        int fd=open("/dev/tty",O_RDWR);
        //fcntl() function, set unblock
        int flags=fcntl(fd,F_GETFL);//get flags  
        flags|=O_NONBLOCK;// change flags  
        fcntl(fd,F_SETFL,flags);//set flags
    
        char buf[256];
        int ret=0;
        while(1){
            //not blocked
            ret=read(fd,buf,sizeof(buf));
            if(ret<0){
                perror("read err:");
                printf("ret is %d
    ", ret);
            }
            if(ret){
                printf("buf is %s
    ", buf);
            }
            printf("haha
    ");
            sleep(2);
        }
        close(fd);
        return 0;
    }
  • 相关阅读:
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程作业
    第一次编程
    第一次博客作业
    个人总结
    第二次结对作业
    软件工程-个人总结
    第三次个人作业
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12342005.html
Copyright © 2011-2022 走看看