Кто нибудь знает как осуществить сабж?
>Кто нибудь знает как осуществить сабж?
man unlink?
>man unlink?#include <unistd.h>
int unlink(const char *pathname);
У меня есть только открытый дескриптор файла!!!
>>man unlink?
>
>#include <unistd.h>
>
> int unlink(const char *pathname);
>
>У меня есть только открытый дескриптор файла!!!
сорри, ступил.
из userspace я способов не вижу : (
>сорри, ступил.
>из userspace я способов не вижу : (
А что-то типа "find -inum XXX -exec rm -f {}"
1. Я не знаю получится или нет, ну вообщем вот! если есть дискриптор то можно попробовать так: man fstat, функция запишет структуру(struct stat *buf) может в ней и будет путь и имя файла, просто для меня не понятны названия этих полей! Затем unlink()!2. Можно вначале открыть файл fopen(), в структуре FILE есть поле в котором содержится путь файла! Затем unlink()!
Второй вариант точно будет работать!
>1. Я не знаю получится или нет, ну вообщем вот! если есть
>дискриптор то можно попробовать так: man fstat, функция запишет структуру(struct stat
>*buf) может в ней и будет путь и имя файла, просто
>для меня не понятны названия этих полей! Затем unlink()!
>
>2. Можно вначале открыть файл fopen(), в структуре FILE есть поле
>в котором содержится путь файла! Затем unlink()!
>
>Второй вариант точно будет работать!
1. Там много чего есть, а вот пути как раз и нету.
2. А где в FILE путь? Я там такого поля не вижу.
>1. Я не знаю получится или нет, ну вообщем вот! если есть
>дискриптор то можно попробовать так: man fstat, функция запишет структуру(struct stat
>*buf) может в ней и будет путь и имя файла, просто
>для меня не понятны названия этих полей! Затем unlink()!
>
>2. Можно вначале открыть файл fopen(), в структуре FILE есть поле
>в котором содержится путь файла! Затем unlink()!
>
>Второй вариант точно будет работать!Собственно проблема-то возникла из-за того, что программа
открывает файл, потом делает chroot до конца работы. А файл-то
она удалить уже не сможет! Я вот думал может получить дескриптор
каталога командой opendir(), но там в структуре удалить не
удастся файл.
>Собственно проблема-то возникла из-за того, что программа
>открывает файл, потом делает chroot до конца работы. А файл-то
>она удалить уже не сможет! Я вот думал может получить дескриптор
>каталога командой opendir(), но там в структуре удалить не
>удастся файл.
Надо файл держать внутри chroot.
>Собственно проблема-то возникла из-за того, что программа
>открывает файл, потом делает chroot до конца работы. А файл-то
>она удалить уже не сможет! Я вот думал может получить дескриптор
>каталога командой opendir(), но там в структуре удалить не
>удастся файл.В unix после удаления файла в ФС уже открытый дескриптор существует как ни в чем не бывало. Так что можно поменять местами, удалить файл сразу после его открытия. После того, как процесс будет завершен, он автоматически будет удален.
Если нужно удалить имя файла из ФС, когда это запросит процесс в chroot, можно до перехода его в chroot создать параллельный процесс, и ожидать этой команды через IPC - pipe, socketpair, mmap, shm*, sem* даже через flock с LOCK_EX на том самом дескрипторе.
Но в любом случае для удаления необходимо знать имя файла. Один физический файл может иметь несколько жестких ссылок в разных дирректориях.