Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > какие-то проблемы с созданием файлов |
Автор: SynthEtic 19.11.2006, 16:49 | ||||
Постановка задачи: грубо говоря: открыть директорию, прочитать все файлы определенного типа и посимвольно переписать их в другую директорию Попытка решения: Я передаю в функцию имя файла, открываю его для чтения, создаю по нужному пути файл для записи, и затем посимвольно читаю/пишу... но вот странная (для меня) ошибка - прочитываются все файлы полностью и записывается все полностью (проверено по размеру прочитанного и записанного), но: прочитывается 124 файла (как и должно быть), а создается только 36! Причем, самое интересное - то, что многие прочитанные файлы в записанном - сливаются в один! Т.е. в один файл записывается несколько... Привожу куски кода, как я это делаю... оба фрагмента у меня дают одинаковый результат... Подскажите, в чем ошибка? Вроде все дескрипторы вовремя открываются и закрываются... Сижу под Suse 10 Код:
и так:
|
Автор: MAKCim 19.11.2006, 17:55 | ||
SynthEtic,
|
Автор: MAKCim 19.11.2006, 18:32 | ||||
это копирование файла? |
Автор: GrayCardinal 19.11.2006, 21:07 |
Неплохо бы весь код на бочку. Конкретно в этих отрывках ошибок не вижу. ![]() |
Автор: bilbobagginz 20.11.2006, 01:32 |
да думаю файлы иногда не только открывать надо... но и закрывать тоже.. |
Автор: kirjanov 20.11.2006, 09:10 | ||
зачем O_WRONLY | O_CREAT? O_CREAT создаст дескриптор для записи.
|
Автор: MAKCim 20.11.2006, 17:26 | ||||||||
кроме того по завершении процесса идет вызов exit_files(), которая закрывает все открытые файлы
зачем тогда в man-е написан O_WRONLY |
Автор: SynthEtic 21.11.2006, 17:28 | ||||||||
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 21.11.2006, 18:20 |
SynthEtic, а что говорит strace по поводу дескрипторов? |
Автор: bilbobagginz 21.11.2006, 20:49 | ||
та ладно, кроме read и write иногда и fflush надо делать (хотя-бы в DEBUG версии), для более чувственного отношения к работе:
|