![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
SynthEtic |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.11.2006 Где: Украина Репутация: нет Всего: нет |
Постановка задачи:
грубо говоря: открыть директорию, прочитать все файлы определенного типа и посимвольно переписать их в другую директорию Попытка решения: Я передаю в функцию имя файла, открываю его для чтения, создаю по нужному пути файл для записи, и затем посимвольно читаю/пишу... но вот странная (для меня) ошибка - прочитываются все файлы полностью и записывается все полностью (проверено по размеру прочитанного и записанного), но: прочитывается 124 файла (как и должно быть), а создается только 36! Причем, самое интересное - то, что многие прочитанные файлы в записанном - сливаются в один! Т.е. в один файл записывается несколько... Привожу куски кода, как я это делаю... оба фрагмента у меня дают одинаковый результат... Подскажите, в чем ошибка? Вроде все дескрипторы вовремя открываются и закрываются... Сижу под Suse 10 Код:
и так:
|
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
SynthEtic,
Это сообщение отредактировал(а) MAKCim - 19.11.2006, 18:09 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это копирование файла? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Неплохо бы весь код на бочку. Конкретно в этих отрывках ошибок не вижу.
![]() |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
да думаю файлы иногда не только открывать надо... но и закрывать тоже..
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
kirjanov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 22.1.2006 Где: Dark wood of erro r Репутация: 3 Всего: 15 |
зачем O_WRONLY | O_CREAT? O_CREAT создаст дескриптор для записи.
|
|||
|
||||
MAKCim |
|
||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
кроме того по завершении процесса идет вызов exit_files(), которая закрывает все открытые файлы
зачем тогда в man-е написан O_WRONLY Это сообщение отредактировал(а) MAKCim - 20.11.2006, 17:27 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||
|
|||||||||
SynthEtic |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.11.2006 Где: Украина Репутация: нет Всего: нет |
MAKCim,
write(fd_out, buf, SIZE);[code=cpp] да, это копирование файла fd_in - дескриптор читаемого файла fd_out - дескриптор создаваемого файла buf - массив char, длиной BUFSIZ - константа, определенная в <stdio.h> как оптимальный размер блока для ввода/вывода kirjanov, я не совсем понял вопрос... зачем я ставлю эти флаги? - чтобы создать файл, если его не существует (а его не существует) и открыть его на запись... O_TRUNC и O_APPEND - не ставлю, так как для меня это не имеет значения - все равно новый файл - пустой, так что, что что транкэйт, что аппенд ![]() bilbobagginz, во втором варианте (с потоками) кода - дескрипторы закрываются ![]() GrayCardinal, собсна, это - функция:
вызываемая внутри другой, которая определяет тип:
которая вызывается при обходе директории:
|
||||||||
|
|||||||||
Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 1 Всего: 73 |
SynthEtic, а что говорит strace по поводу дескрипторов?
-------------------- Теперь при чем :P |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
та ладно, кроме read и write иногда и fflush надо делать (хотя-бы в DEBUG версии), для более чувственного отношения к работе:
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |