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\n",add);
    close(fd);
}

  

  
posted @ 2015-03-24 11:17  Sibyl_Zhang  阅读(122)  评论(0编辑  收藏  举报