/*参考\code\vm\mmpacopy.c 书练习题9.5答案 */
#include "csapp.h"
void mmapcopy(int fd, int size) {
char *bufp;
bufp = (char *)mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
write( 1, bufp, size);
return;
}
int main(int argc,char *argv[]) {
struct stat stat;
int fd;
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
exit(EXIT_FAILURE);
}
fd = open(argv[1], O_RDONLY,0);
fstat(fd, &stat);
mmapcopy(fd, stat.st_size);
exit(0);
}
答案:
#include "csapp.h"
int main(int argc,char *argv[]) {
char *bufp;
struct stat stat;
int fd;
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
exit(EXIT_FAILURE);
}
fd = open(argv[1], O_RDWR,0);//这里写只读的话,会段错误哦
fstat(fd, &stat);
bufp = (char *)mmap(NULL, stat.st_size, PROT_WRITE, MAP_SHARED, fd, 0);
//共享bufp这片空间为可写,将文件fd关联上去。
* bufp = 'J';
munmap(bufp,stat.st_size);
exit(0);
}