cplusplus11.Examples/UNIX/ipc/posix-shm-read.cpp
Source: cplusplus11.Examples/UNIX/ipc/posix-shm-read.cpp
/* Adapted from "the Linux Programming Interface"
Chapter 54
*/
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/mman.h>
#include<unistd.h>
#include<cstring>
#include<errno.h>
#include<string>
#include<iostream>
void error(const std::string &text);
int main(int argc, char **argv) {
int _fd;
char *addr;
struct stat st_buf;
if(argc != 2) {
std::cerr << "Requires one argument..\n" << argv[0] << "path \n";
exit(EXIT_FAILURE);
}
_fd = shm_open(argv[1], O_RDONLY, 0);
if(_fd == -1)
error("shm_open");
if(fstat(_fd, &st_buf) == -1)
error("fstat");
addr = (char*) mmap(NULL, st_buf.st_size, PROT_READ, MAP_SHARED, _fd, 0);
if(addr == MAP_FAILED)
error("mmap");
if(close(_fd) == -1)
error("close");
write(STDOUT_FILENO, addr, st_buf.st_size);
std::cout << "\n";
return EXIT_SUCCESS;
}
void error(const std::string &text) {
std::cerr << "Error: " << text << "\n" << strerror(errno) << "\n";
exit(EXIT_FAILURE);
}