SYSTEM CALL: shmat(); PROTOTYPE: int shmat ( int shmid, char *shmaddr, int shmflg); RETURNS: address at which segment was attached to the process, or -1 on error: errno = EINVAL (Invalid IPC ID value or attach address passed) ENOMEM (Not enough memory to attach segment) EACCES (Permission denied) NOTES:
此外,如果将 SHM_RDONLY 标志与 flag 参数进行 OR 运算,则共享内存段将被映射进来,但标记为只读。
这个调用可能是最简单的用法。 考虑一下这个包装函数,它传递一个段的有效 IPC 标识符,并返回该段附加到的地址。
char *attach_segment( int shmid ) { return(shmat(shmid, 0, 0)); }