extern "C" { #include #include #include #include #include #include } int main( int argc, const char** argv, const char** envp ) { if (argc == 1) { int seg1id = shmget(0x12345600, (size_t) 0x40000000, IPC_CREAT|SHM_HUGETLB|0640 ); if (seg1id == -1) { perror("shmget(1GB)"); return 1; } void* seg1adr = shmat(seg1id, (void*) 0x400000000, 0); if (seg1adr == (void*) -1) { perror("shmat(1GB)"); return 1; } int seg2id = shmget(0x12345601, (size_t) 0x10000000, IPC_CREAT|SHM_HUGETLB|0640 ); if (seg2id == -1) { perror("shmget(256MB)"); return 1; } void* seg2adr = shmat(seg2id, (void*) 0x580000000, 0); if (seg2adr == (void*) -1) { perror("shmat(256MB)"); return 1; } char* seg_p = (char*) seg1adr; int i1 = 182; while (i1 > 0) { memset(seg_p, 0x55, 0x400000); seg_p += 0x400000; i1--; } seg_p = (char*) seg2adr; i1 = 6; while (i1 > 0) { memset(seg_p, 0xAA, 0x400000); seg_p += 0x400000; i1--; } if (shmdt((void*) 0x400000000) != 0) { perror("shmdt(1GB)"); return 1; } if (shmdt((void*) 0x580000000) != 0) { perror("shmdt(256MB)"); return 1; } } else { int seg1id = shmget(0x12345600, 0, 0); if (seg1id == -1) { perror("shmget(1GB)"); return 1; } void* seg1adr = shmat(seg1id, (void*) 0x400000000, SHM_RDONLY); if (seg1adr == (void*) -1) { perror("shmat(1GB)"); return 1; } int seg2id = shmget(0x12345601, 0, 0); if (seg2id == -1) { perror("shmget(256MB)"); return 1; } void* seg2adr = shmat(seg2id, (void*) 0x580000000, SHM_RDONLY); if (seg2adr == (void*) -1) { perror("shmat(256MB)"); return 1; } if (shmdt((void*) 0x400000000) != 0) { perror("shmdt(1GB)"); return 1; } if (shmdt((void*) 0x580000000) != 0) { perror("shmdt(256MB)"); return 1; } } return 0; }