Уважаемые, обращаюсь к Вам за советом. 1) select/poll Есть директория (к примеру dir), в которую асинхронно пользователем сваливаются файлы, а программа должна отслеживать изменения в структуре каталога и узнавать имена вновь прибывших файлов. Естественно, что нам необходим или select или poll. Вопрос в том как правильно написать этот код. Моя попытка: int d, fd; struct pollfd cdp[1]; d = open(dir, O_RDONLY, S_IRUSR); cdp[0].fd = d; cdp[0].events = POLLRDNORM; while(1) { fd = poll(cdp, 1, -1); if (fd == -1 || (cdp[0].revents & (POLLERR|POLLHUP|POLLNVAL))) { /* ERROR */ } else if (fd == 0) { /* ERROR */ } else { if (read(d, buf, sizeof(buf)) == -1) { /* ERROR */ } else { /* в buf хочу получить имя файла (ну или структурку какую) */ } } Дык вот этот код как умолишенный начинает работать. В buf пишется один символ (^F). Это вероятно ошибка. Как нужно переделать? 2) fdopen и open Вопрос второй. open умеет разделять права доступа к файлу на owner, owner group и other. fdopen не умеет. Как с помощь fdopen получить FILE* на открытый дескриптор: fd = open(file, O_CREAT | O_EXCL, S_IRWXU); ? fdopen(fd, "w") не работает (возвращает 0x0 (NULL)).