Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение вывода консольной программы, а также "прямая" запись в файл 
:(
    Опции темы
ne_tru_e
Дата 6.2.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

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



Дано: две программки и один bat-файл.
Далее приводится их содержимое.

cincout.cpp
Код

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char s[512];
    char t[] = "gets!\n";
    FILE *f;

    while(1){
        f = fopen("log.txt","ac");
        gets(s);
                fputs(t,f);
        fputs(s,f);
        fflush(f);
        fclose(f);        
        if( strstr(s, "Fixating time:") ) break;
    }
    return EXIT_SUCCESS;
}


strour.cpp
Код

#include <cstdlib>
#include <iostream>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
char messages[26][74] = 
{
"Writing pregap for track 1 at -150",
"Starting new track at sector: 0",
"Track 01:    0 of  16 MB written.",
"Track 01:    1 of  16 MB written (fifo  87%) [buf 100%] 167.3x.",
"Track 01:    2 of  16 MB written (fifo 100%) [buf 100%]   0.6x.",
"Track 01:    3 of  16 MB written (fifo 100%) [buf 100%]  21.3x.",
"Track 01:    4 of  16 MB written (fifo 100%) [buf 100%]  20.7x.",
"Track 01:    5 of  16 MB written (fifo 100%) [buf 100%]  21.2x.",
"Track 01:    6 of  16 MB written (fifo 100%) [buf 100%]  20.5x.",
"Track 01:    7 of  16 MB written (fifo 100%) [buf 100%]  21.3x.",
"Track 01:    8 of  16 MB written (fifo 100%) [buf 100%]  20.5x.",
"Track 01:    9 of  16 MB written (fifo 100%) [buf 100%]  21.2x.",
"Track 01:   10 of  16 MB written (fifo 100%) [buf 100%]  20.5x.",
"Track 01:   11 of  16 MB written (fifo 100%) [buf 100%]  21.1x.",
"Track 01:   12 of  16 MB written (fifo 100%) [buf 100%]  20.4x.",
"Track 01:   13 of  16 MB written (fifo 100%) [buf 100%]  21.2x.",
"Track 01:   14 of  16 MB written (fifo 100%) [buf 100%]  20.4x.",
"Track 01:   15 of  16 MB written (fifo 100%) [buf 100%]  21.1x.",
"Track 01:   16 of  16 MB written (fifo 100%) [buf 100%]  20.4x.",
"Track 01: writing  30 KB of pad data.",
"Track 01: Total bytes read/written: 163663872/163694592 (79929 sectors).",
"Writing  time:   73.537s",
"Average write speed  17.4x.",
"Min drive buffer fill was 100%",
"Fixating...",
"Fixating time:    5.619s "
};  

    int i=0;
    char n[] = "\n";
    
    for(i=0;i<26;i++){
      HANDLE h = CreateEvent(NULL,false,false,NULL);
      WaitForSingleObject(h, 2000);
      printf("%s\n",messages[i]);
    }

    return EXIT_SUCCESS;
}


wcc.bat
Код

strout | cincout.exe


Компилирую программки, кладу два exe'шника в одну папку, в ней же тот батник. Запускаю батник.
Что должно быть: в процессе работы wcc.bat появляется файл log.txt ненулевого размера, через каждые 2 секунды он увеличивает свой размер.
Что получаем: файл log.txt появляется, но нулевого размера. А заполняется он лишь  в конце работы wcc.bat.

Так вот: как мне производить запись в файл, чтобы данные оказывались в файле сразу, а не только после работы wcc.bat ?

Вообще, как вы уже поняли, мне нужно прочесть вывод этой консольной программы.
PM WWW Jabber   Вверх
newinfo2005
Дата 6.2.2009, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, в вашем случае лучше использовать PIPE-каналы, так как ваша идея будет работать плохо и не очень надежно.
PM MAIL ICQ   Вверх
SenkraD
Дата 6.2.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

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



ne_tru_e, послушай newinfo2005 - дельный совет, вот нашёл это, должно помочь.
Может ещё найду прямой пример, тогда докину ссылку

Ещё это держи

Это сообщение отредактировал(а) SenkraD - 6.2.2009, 23:59


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
ne_tru_e
Дата 7.2.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

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



Спасибо, но запись в файл я все равно добью!.. Как-нибудь.
PM WWW Jabber   Вверх
SenkraD
Дата 7.2.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

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



ne_tru_e, а сделать оутпутный файл параметром командной строки не подходит?


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
ne_tru_e
Дата 7.2.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

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



SenkraD, я уже так делал, эффект тот же - файл нулевой, заполняется только когда программа отработает до конца.
PM WWW Jabber   Вверх
SenkraD
Дата 7.2.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

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



Извиняюсь за предыдущий пост - ступил.

ne_tru_e, я с функцияси С не работал, когда мне нужно было логирование на подобии
того, которое необходимо тебе - то я использовал потоки (streams). 

Код

#include <fstream>
...

std::ofstream ofs("log.txt", std::ios::app);
ofs << "log string 1" << std::endl;
Sleep(2000);
ofs << "log string 2" << std::endl;
Sleep(2000);
ofs << "log string 3" << std::endl;

...
// [ofs << std::endl;] is equal to [ofs << "\r\n"; ofs.flush();]


P.S. Что ещё могу сказать так это то, что не нужно постоянно октрывать/закрывать файл,
       если делаеш flush.

Это сообщение отредактировал(а) SenkraD - 7.2.2009, 18:13


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
ne_tru_e
Дата 7.2.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

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



Садись, два. Не работает.
PM WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

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


 




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


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

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