I have the following C program
#include <stdio.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
int main()
{
key_t shm_key;
int shm_flag,shm_id,shm_size;
void *shm_addr;
shm_key = ftok("/home/meow/Arena",22);
perror("SHMKEY");
shm_id = shmget(shm_key,sizeof(int)*20,IPC_CREAT);
perror("SHMGET");
shm_addr = shmat(shm_id,NULL,0);
perror("SHMAT");
}
when execute without root privilege I get
meow@darkArts ~/Arena/c $ gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Permission denied
And when executed by the root user I get the following message
root@darkArts:/home/meow/Arena/c# gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Success
Is it possible to bind the shared memory to my address space without the root privileges ?
EDIT:
Withshmid = shmget(key, SHMSZ, IPC_CREAT | 0666); and shmid = shmget(key, SHMSZ, IPC_CREAT | 0777); I get
meow@darkArts ~/Arena/c $ gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Permission denied
SHMAT: Invalid argument
perror()only if a function indicated a failure.