- 论坛徽章:
- 0
|
struct stat file_stat;
char FILENAME[300], FILENAME2[300];
char command[300];
strcpy( FILENAME, argv[1] );
strcpy( FILENAME2, argv[2] );
if (stat(FILENAME, &file_stat) < 0)
{
printf("%s status error!\n", FILENAME);
perror("stat");
exit(1);
}
int length = file_stat.st_size;
int fd = shm_open(FILENAME,O_RDWR , S_IRWXO | S_IRWXG | S_IRWXU);
if (fd < 0)
{
perror("shm_open");
exit(2);
}
int n = ftruncate(fd, length);
if (n < 0)
{
perror("ftruncate");
exit(2);
}
void * p1;
p1 = (void *)mmap(0, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (p1 < 0)
{
perror("mmap");
exit(2);
}
int fd2 = shm_open(FILENAME2,O_RDWR | O_CREAT , S_IRWXO | S_IRWXG | S_IRWXU);
if (fd2 < 0)
{
perror("shm_open");
exit(2);
}
int n2 = ftruncate(fd2, length);
if (n2 < 0)
{
perror("ftruncate");
exit(2);
}
void * p2;
p2 = (void *)mmap(0, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (p2 < 0)
{
perror("mmap");
exit(2);
}
memcpy(p2, p1, length);
munmap(p1, length);
munmap(p2, length);
close(fd);
close(fd2);
exit(0);
急救:memcpy特别慢,把访问文件的所有进程停了就快了,如何解决? |
|