• 2015-3-24


    1、freopen(const char *filename, const char *mode, FILE *stream)函数:重定向函数,

      形参说明:
      filename:需要重定向到的文件名或文件路径。
      mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
      stream:需要被重定向的文件流。
      返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
      举例,从一个文件中输入数据,并输出到另外一个文件中:
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
        string strLine;
        while (cin >> strLine)
        {
            cout << strLine << endl;
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

    2、内存映射mmap这个函数,冯诺依曼结构中表示运算器不能直接对硬盘上的文件进行操作。mmap函数的功能就是将文件映射到某一段内存中,然后操作内存就相当与操作文件。这样的话对文件操作更加方便。mamp函数的定义如下:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);一共有六个参数,参数算是比较多了。第一个表示映射内存的起始地址,如果为NULL,那么操作系统会自动的找到空闲的内存映射。第二个参数是映射长度,第三个是映射区域的保护方式,第四个是影响映射区域的各种特性第五个为文件描述符,第六个文件映射的偏移量,通常设置为0。下面看代码来理解这个函数:

    #include<stdio.h>
    #include<fcntl.h>
    #include<sys/mman.h>
    #include<string.h>
    
    int main()
    {
        int fd = 0;
        int file_size = 0;
        void *add = NULL;
        
        fd = open("hello",O_RDWR|O_CREAT,0644);
        if(fd < 0){
            perror("open");
            return 1;
        }
        file_size = lseek(fd,0,SEEK_END);
        lseek(fd,0,SEEK_SET);
    
        add = mmap(NULL,file_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
        if(add ==(void *)-1){
            perror("mmap");
            return 1;
        }
        strcpy(add,"linrong ");
        printf("%s
    ",add);
        close(fd);
    }
    

      

      
  • 相关阅读:
    栈和队列
    链表
    map
    二叉平衡树旋转
    二叉排序树详情
    红黑树详情
    查并集
    动态规划
    位操作
    字典树
  • 原文地址:https://www.cnblogs.com/Shibo2014/p/4362226.html
Copyright © 2020-2023  润新知