Зачем вам нужен вход?Единственный раз, когда это необходимо, - это вызов функции из обработчика сигнала;в противном случае безопасность потоков так же хороша.И malloc
, и mmap
являются поточно-ориентированными.Ни один из них не является безопасным для асинхронного сигнала в POSIX.На практике mmap
, вероятно, работает нормально из обработчика сигнала, но сама идея выделения памяти из обработчика сигнала - очень плохая идея.
Если вы хотите использовать mmap
для выделения анонимной памяти,Вы можете использовать (не на 100% портативный, но определенно лучший):
p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
Портативная, но уродливая версия:
int fd = open("/dev/zero", O_RDWR);
p = mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
close(fd);
Обратите внимание, что MAP_FAILED
, а не NULL
код для сбоя.