//read.cpp
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <iostream>
#define PATH "/tmp/unixdomain"
int main(int argc, const char* argv[]) {
int fd = open(PATH, O_RDWR|O_CREAT, 0642);
if(-1 == fd){
std::cout << "open fail" << std::endl;
exit(-1);
}
if(ftruncate(fd, sizeof(int) * 2) < 0) {
std::cout << "ftruncate fail" << std::endl;
close(fd);
exit(-1);
}
int* p = (int*)mmap(NULL, sizeof(int) * 2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if(MAP_FAILED == p) {
std::cout << "mmap fail" << std::endl;
close(fd);
exit(-1);
}
*p = 0;
while(true) {
if(0 == *p)
sleep(1);
else
break;
}
std::cout << "read:" << *(p+1) << std::endl;
munmap(p, sizeof(int)*2);
close(fd);
return 0;
}
//write.cpp
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <iostream>
#define PATH "/tmp/unixdomain"
int main(int argc, const char* argv[]) {
int fd = -1;
while(true) {
fd = open(PATH, O_RDWR, 0642);
if(-1 == fd)
sleep(1);
else
break;
}
int* p = (int*)mmap(NULL, sizeof(int)*2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
*(p+1) = 111;
*p = 1;
std::cout << "write: " << *(p+1) << std::endl;
munmap(p, sizeof(int)*2);
close(fd);
return 0;
}