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); }