zoukankan      html  css  js  c++  java
  • 系统编程之文件操作

        关于文件的操作,主要的函数是open,close,write,read,lseek,mmap,这几个函数,因为到现在再把以前的文操作再复习一边,都是比较简单的操作,都不多说。直接给出代码::

        1,open write函数:

        

      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 #include <fcntl.h>
      6 
      7 
      8 int main()
      9 {
     10     int fd =open("hong.txt",O_CREAT|O_RDWR,0777);
     11     if(fd < 0)
     12     {
     13         perror("open");
     14         exit(1);
     15     }
     16 
     17     printf("open file discribler is %d 
    ",fd);
     18 
     19     char* buf ="hello binary_tree!
    ";
     20 
     21     fd=write(fd,buf,strlen(buf));
     22     if(fd < 0)
     23     {
     24         perror("write");
     25         exit(1);
     26     }
     27 
     28     close(fd);
     29 }
    ~                                                                                                                                                  
    ~                                                                                                                                                  
    ~               

        运行结果:

        

        2.read

        

      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 #include <fcntl.h>
      6 
      7 
      8 int main()
      9 {
     10     int fd =open("hong.txt",O_CREAT|O_RDWR,0777);
     11     if(fd < 0)
     12     {
     13         perror("open");
     14         exit(1);
     15     }
     16 
     17     printf("open file discribler is %d 
    ",fd);
     18 
     19     char buf[30];
     20     memset(buf,0,30);
     21 
     22     int fp=read(fd,buf,1023);
     23     if(fp < 0)
     24     {
     25         perror("read");
     26         exit(1);
     27     }
     28     printf("read buf is %s
    ",buf);
     29 
     30     fp=write(1,buf,sizeof(buf));
     31     if(fp < 0)
     32     {
     33         perror("write");
     34         exit(1);
     35     }
     36 
     37     close(fd);
     38 }
    ~                                                                                                                                                  
    ~                                                                                                                                                  
    ~                                                                                                                                                  
    ~                           

      运行结果:

          

      3.mmap:将文件映射到内存操作。

          

          

      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 #include <fcntl.h>
      6 #include <sys/mman.h>
      7 #include <sys/stat.h>
      8 
      9 
     10 int main()
     11 {
     12     int fd =open("hong.txt",O_CREAT|O_RDWR,0777);
     13     if(fd < 0)
     14     {
     15         perror("open");
     16         exit(1);
     17     }
     18 
     19     struct stat my;
     20     int fp = fstat(fd,&my);
     21     if(fp < 0)
     22     {
     23         perror("fstat
    ");
     24         exit(1);
     25     }
     26 
     27 
     28     char* addr= mmap(NULL,my.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
     29     if(addr == (void*)-1)
     30     {
     31         perror("mmap
    ");
     32         exit(1);
     33     }
     34     printf("addr is %s
    ",addr);
     35     strcpy(addr,"this is new string
    ");
     36 
     37     char buf[40];
     38     memset(buf,0,40);
     39     fp =read(fd,buf,40);
     40     if(fp < 0)
     41     {
     42         perror("open");
     43         exit(1);
     44     }
     45     printf("read buf is %s
    ",buf);
     46 
     47     munmap(addr,my.st_size);
     48     addr=NULL;
     49     close(fd);
     50 }
    ~              

         总结:

           关于文件操作,都是比较简单的操作,其中,比较难掌握的是mmap,其实作用就是将文件映射到内错单元,通过操作内存来操作文件,值得注意的是一些小问题,比如,关闭文件,释放映射的单元,memset的初始化之类的问题,还有,如果是在读写文件的时候,特别是读的时候,发现读出的数据异常,极有可能是lseek读写指针的问题,所以要主要清零的问题。其他的问题,如果是忘了函数参数的具体。可以man手册帮助

          

  • 相关阅读:
    PIL 和 pythonopencv 从内存字节码中读取图片并转为np.array格式
    【转载】 什么是元类
    【转载】 Py之cupy:cupy的简介、安装、使用方法之详细攻略
    【转载】 vscode如何在最新版本中配置c/c++语言环境中的launch.json和tasks.json?
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    Javascript高级程序设计第二版第六章面向对象程序设计(ObjectOriented Programming)简称OOP编程笔记
    Javascript高级程序设计第二版第五章引用类型笔记
    css权重简单之谈
    编辑神器VIM下安装zencoding
    显示层3s后隐藏
  • 原文地址:https://www.cnblogs.com/hongzhunzhun/p/4547497.html
Copyright © 2011-2022 走看看