Возможно, что сервер настраивается для использования списков управления доступом, который является расширением нормальных полномочий файла Unix, или SELinux основывал роли.
Можно проверить ACL на каталоге как это...
> getfacl /path/to/your/tmp
Необходимо получить что-то вроде этого, если все нормально...
# file: tmp
# owner: apache
# group: apache
user::rw-
group::r--
other::r--
Если Вы видите строки как следующее...
user:someotheruser:---
group:someothergroup:---
... Вы имеете дело с файлом/dir ACL'd. Как можно, вероятно, предположить, это позволяет Вам установить права для определенных пользователей и групп. Можно изменить их (разрешение полномочий) с командой setfacl
. Существует также множество значений по умолчанию, возможных в ACL на каталоге, который заставил бы новые файлы быть созданными с неожиданными полномочиями.
Если это не делает этого для Вас, Вы могли бы иметь дело с безопасностью на уровне ролей в SELinux. Выполните команду getenforce
. Если это будет установлено на осуществление Apache, то только сможет считать файлы в контексте HTTP.
> /usr/sbin/getenforce
Enforcing
Вы должны были бы chcon
(измените контекст), Ваш tmp каталог...
> chcon -R -t httpd_sys_content_t /path/to/your/tmp
Надежда, которая помогает!
Это на самом деле кажется на описание общей памяти POSIX.
Вот быстрая пара примеров программы, чтобы показать, как она работает. В моей системе файлы создаются в/run/shm (который является tmpfs). Другие системы используют/dev/shm. Ваша программа не должна заботиться, shm_open
заботится об этом.
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
int fd;
long pagesize;
char *region;
if (-1 == (pagesize = sysconf(_SC_PAGE_SIZE))) {
perror("sysconf _SC_PAGE_SIZE");
exit(1);
}
if (-1 == (fd = shm_open("/some-name", O_CREAT|O_RDWR|O_EXCL, 0640))) {
perror("shm_open");
exit(1);
}
if (-1 == ftruncate(fd, pagesize)) {
perror("ftruncate");
shm_unlink("/some-name");
exit(1);
}
region = mmap(NULL, pagesize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (!region) {
perror("mmap");
shm_unlink("/some-name");
exit(1);
}
// PAGESIZE is guaranteed to be at least 1, so this is safe.
region[0] = 'a';
sleep(60);
shm_unlink("/some-name");
}
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
int main() {
int fd;
long pagesize;
char *region;
if (-1 == (pagesize = sysconf(_SC_PAGE_SIZE))) {
perror("sysconf _SC_PAGE_SIZE");
exit(1);
}
if (-1 == (fd = shm_open("/some-name", O_RDONLY, 0640))) {
perror("shm_open");
exit(1);
}
region = mmap(NULL, pagesize, PROT_READ, MAP_SHARED, fd, 0);
if (!region) {
perror("mmap");
shm_unlink("/some-name");
exit(1);
}
// PAGESIZE is guaranteed to be at least 1, so this is safe.
printf("The character is '%c'\n", region[0]);
}
LDFLAGS += -lrt
all: server client
name
параметр дляshm_open(2)
не соответствует никакой записи файловой системы. Действительно, на Linux, это не могло встроить наклонные черты, таким образом, это нельзя назвать/tmp/my_entry_point
, поскольку корреспондент указан. Снова, это может быть вопрос сверхспецификации в вопросе, но вопрос должен быть поднят. – Warren Young 24.08.2012, 21:40