Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Использование файла созданного предыдущей функцией


Автор: Rutti 31.10.2006, 16:07
В пределах отдной main() одна функция создаёт файл с какими-то данными, а следующая за ней функция должна использовать данные, находящиеся в файле созданном предыдущей функцией.
Но файл создаётся только после выхода из main(). Т.е. вторая функция остаётся без работы.

Автор: Бонифаций 31.10.2006, 16:24
а "предыдущая" функция закрывает файл?

Автор: JackYF 31.10.2006, 16:40
По-моему, после выхода из main() заканчивается вся программа, и файл создаться никак не может.

Если же серьезно, то, во-первых, данная тема уже поднималась...,
а во вторых - объяви файл до main() или передавай его второй функции в качестве параметра.

Автор: Rutti 31.10.2006, 17:40
Цитата(JackYF @  31.10.2006,  16:40 Найти цитируемый пост)
объяви файл до main() или передавай его второй функции в качестве параметра. 


А что это даёт?

На всякий случай код второй функции:
Код

    ifstream infile("s.txt");

    infile.open("s.txt");
    char buffer[256];
    *buffer = 0;
    int count=0;

    while(!infile.eof())
    {
        infile.getline(buffer, sizeof(buffer));
        if(*buffer)
        {
            count++;
        }
        else
        {
            cout<<"file not found!"<<endl;
            break;
        }
    }


Автор: Бонифаций 31.10.2006, 18:02
Цитата(Rutti @  31.10.2006,  17:40 Найти цитируемый пост)
 ifstream infile("s.txt");
    infile.open("s.txt");


вы дважды открываете файл тут


Автор: apook 31.10.2006, 18:19
Да да надо передавать в 2-ю функцию уже открытый файл а при выходе из 2-й функции его не закрывать а стереть error-ы(скорее всего это надо)
можно еще указатель в начало файла поставить.  

Автор: MAKCim 31.10.2006, 18:40
Цитата

По-моему, после выхода из main() заканчивается вся программа, и файл создаться никак не может.

Почему?
Системный вызов write на дескриптере файла, который открыт не с флагом O_SYNC возвращает управление при передаче данных в буфер драйвера блочного устройства. То есть не известно, когда этот драйвер сформирует request в очереди запросов и когда начнется действительная запись на диск

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)