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

    创建一个空洞文件

    #include <fcntl.h>
    #include <unistd.h>
    #include <cstring>
    int main(){
        int fd=open("hole",O_WRONLY | O_CREAT,0666);
        write(fd,"1G hole are coming",strlen("1G hole are coming"));
        lseek(fd,1024*1024,SEEK_CUR);
        write(fd,"1G hole are ending",strlen("1G hole are ending"));
        close(fd);
        return 0;
    }
    open  返回文件描述符             头文件<fcntl.h>
    参数说明
    a,至少且只能指定一个:O_RDONLY  O_WRONLY  O_RDWR
    b,可选择的:O_APPEND(写追加)  O_CREAT(不存在则创建,指定mode)  O_EXCL(先测试是否存在,载创建)  
        O_TRUNC(若打开的文件可写,将其长度截短为0)  O_NOCTTY(不将设备作为进程的控制终端)   O_NONBLOCK(非阻塞模式)
     
    lseek  返回文件偏移量(off_t)   close     头文件<unistd.h>
    lseek参数:SEEK_SET  SEEK_CUR  SEEK_END     offset可正可负
    使用lseek允许造成文件空洞,空洞部分并不占用磁盘存储空间
    cat hole > hole.copy  所有的空洞都会被填为0,hole.copy的占用磁盘为1M
     
    read 返回已读取的字节数   <unistd.h>
    write 若文件以O_APPEND打开,每次写时都会先移到文件末尾,然后写
    pread 和 pwrite      
    ssize_t pread ( int filedes, void *buf, size_t nbytes, off_t offset);    //lseek+read/write的原子操作
     
    int dup(int fd);int dup2(int fd, int fd2);
    dup是将fd复制给最小未使用的fdd,up2相当于一个原子操作,首先关闭fd2,然后再复制到fd2上
     
    void sync(void); int fsync(int fd); int fdatasync(int fd);
    sync.是强制将所有页面缓冲区都更新到磁盘上。
    fsync.是强制将某个fd涉及到的页面缓存更新到磁盘上(包括文件属性等信息).
    fdatasync.是强制将某个fd涉及到的数据页面缓存更新到磁盘上。
     
    int fcntl(int fd, int cmd, ...); 改变已打开的文件的性质   <fcntl.h>
    cmd:
    F_DUPFD  复制一现有的描述符
    F_GETFD/F_SETFD 获取/设置文件描述符标志
    F_GETFL/F_SETFL  获取/设置文件状态标志
    F_GETOWN/F_SETOWN 获取/设置异步IO所有权
    F_GETLK,F_SETLK,F_SETKW  获取/设置记录锁
     
    ioctl

     

  • 相关阅读:
    C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
    .net简单录音和播放音频文件代码
    一个简单的小例子让你明白c#中的委托-终于懂了!
    你是高级程序员?那就来挑战一下!
    .NET中的三种Timer的区别和用法
    C#中判断空字符串的3种方法性能分析
    解决statusStrip控件上的项目不能靠右对齐的问题
    C#的WebBrowser操作frame如此简单
    Python学习---Python安装与基础1205
    Java学习---IKAnalyzer中文分词器V2012_FF使用手册
  • 原文地址:https://www.cnblogs.com/zhoutian220/p/4020864.html
Copyright © 2011-2022 走看看