You misunderstood. $shmid is the wrong name, you are getting the address of the mmapped area, not a shared memory ID. mmap(2) has nothing to do with the SysV IPC facilities.
I am not entirely certain on how to use mmap(2) as an alternative to shared memory, since I've never done that, but my reading of the docs and manpage suggest that it is limited to passing down the mmap to child processes on fork. I could be wrong here though, as I said, since I've never tried to use the facility in that capacity.
Makeshifts last the longest.