Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дождаться появления файла 
:(
    Опции темы
CPlusPlusFAN
Дата 16.11.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Здравствуйте!

Процессу необходимо дождаться появления файла ( test.txt ), который создаётся, к примеру, параллельным процессом. Причём дождаться не куска файла, а полного ( чтобы его можно было открыть ). Можно бы в цикле пытаться открывать файл. А есть ли вариант получше? ( средствами АПИ, например )

Спасибо за внимание.
PM MAIL ICQ Jabber   Вверх
Rififi
Дата 16.11.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



ReadDirectoryChangesW
фигню сморозил, отвечал по rss, там не видно разделов :gigi:

Это сообщение отредактировал(а) Rififi - 16.11.2008, 21:51
PM MAIL   Вверх
MAKCim
Дата 16.11.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



CPlusPlusFAN, 
man inotify

1. ждем создание файла в директории через (IN_CREATE)
2. ждем пока он не будет закрыт процессом после записи (IN_CLOSE_WRITE)

Код

char buf[PATH_MAX];
struct inotify_event event;
int inotify_fd = inotify_init();
if (inotify_fd < 0) {
    /* error */
}
int fd = inotify_add_watch(inotify_fd, DIRECTORY_PATH, IN_CREATE | IN_ONESHOT);
if (fd < 0) {
    /* error */
}
do {
    if (read(fd, &event, sizeof(event) < 0) {
        /* error */
    }
    if (memmem(event.name, event.len, "test.txt", 8) == NULL)
        continue;
    break;
} while (1);
inotify_rm_watch(inotify_fd, fd);
snprintf(buf, PATH_MAX, "%s/%s", DIRECTORY_PATH, event.name);
if ((fd = inotify_add_watch(inotify_fd, buf, IN_CLOSE_WRITE | IN_ONESHOT)) < 0) {
    /* error */
}
...



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
CPlusPlusFAN
Дата 16.11.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



MAKCim, хорошо. А если к моменту регистрации события IN_CREATE файл уже был создан?

Это сообщение отредактировал(а) CPlusPlusFAN - 17.11.2008, 05:00
PM MAIL ICQ Jabber   Вверх
CPlusPlusFAN
Дата 16.11.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

Репутация: нет
Всего: нет



Если файл не был закрыт процессом?
Если файл сбрасывался flush'ем на диск, тогда событие регистрируется?
PM MAIL ICQ Jabber   Вверх
MAKCim
Дата 17.11.2008, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(CPlusPlusFAN @  16.11.2008,  22:45 Найти цитируемый пост)
А если к моменту регистрации события IN_CREATE файл уже был создан?

ну не ждать тогда события IN_CREATE  smile 


Цитата(CPlusPlusFAN @  16.11.2008,  23:19 Найти цитируемый пост)
Если файл сбрасывался flush'ем на диск, тогда событие регистрируется? 

fflush() - это обычный write
в процессе записи генерируются события IN_ACCESS, IN_ATTRIB, IN_MODIFY

сам подумай, как можно узнать, что с файлом больше не будут работать, если он не закрывается?
только эвристикой
и это будет не 100%


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.