Avatar billede krismort Nybegynder
20. juli 2005 - 16:03 Der er 16 kommentarer

lytning på hvad der bliver udskrevet til konsol.

Hej,
Jeg bruger et par komponenter (libs) som udskriver noget til konsollen. er det muligt at lytte på hvad de skriver til konsollen så jeg i mit eget program kan gøre et eller andet hvis der bliver skrevet noget specielt ?

- Kristian
Avatar billede arne_v Ekspert
20. juli 2005 - 16:35 #1
prøv freopen
Avatar billede arne_v Ekspert
20. juli 2005 - 16:35 #2
eksempel:

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
    freopen("redir.out", "w", stdout);
    printf("Test af C IO\n");
    cout << "Test af C++ IO" << endl;
    return 0;
}
Avatar billede arne_v Ekspert
20. juli 2005 - 16:37 #3
jeg tvivler dog på at det er specielt veldefineret hvordan sådan noget
skal virke så check med din compiler

men det virkede tilfældigvis med mingw gcc 3.2 og ms vc++ 7.1 (vs 2003)
Avatar billede krismort Nybegynder
20. juli 2005 - 18:29 #4
Jeg har bare det problem at programmet udelukkende skal køre på cd-rom så jeg har ingen muligheder for at skrive til en fil og læse fra en fil.
Avatar billede arne_v Ekspert
20. juli 2005 - 18:41 #5
så du har behov for at redirecte stdout til en named pipe / mailbox / hvad det
nu hedder på dit styre system og så læse derfra ?

(du kan ikke bare skrive til og læse fra en fil i TEMP)
Avatar billede krismort Nybegynder
20. juli 2005 - 19:51 #6
nej det er desværre et krav at programmet ikke må skrive til harddisken.
Avatar billede arne_v Ekspert
20. juli 2005 - 22:17 #7
jeg fandt et eksempel på redirect til named pipes på nettet

#include <cstdio>
#include <iostream>

#include <fcntl.h>
#include <io.h>

using namespace std;

int main()
{
    int oldstdout = _dup(_fileno(stdout));
    int pipehandles[2];
    _pipe(pipehandles,20480,_O_BINARY);
    _dup2(pipehandles[1],_fileno(stdout));
    printf("Test af C IO\n");
    cout << "Test af C++ IO" << endl;
    _dup2(oldstdout,_fileno(stdout));
    char buf[20480];
    int n = _read(pipehandles[0],buf,sizeof(buf));
    printf("%s",buf);
    return 0;
}
Avatar billede arne_v Ekspert
20. juli 2005 - 22:17 #8
testet med de samme compilere
Avatar billede krismort Nybegynder
25. juli 2005 - 23:59 #9
det eksempel du fandt kunne jeg entligt godt bruge men der er desværre det problem at jeg er så er nød til at tømme bufferen hele tiden.. man må da kunne udføre en forespørgsel på om der er data eller ej i bufferen / pipen.
Avatar billede arne_v Ekspert
26. juli 2005 - 00:02 #10
er det ikke bare at lave bufferen stor nok ?
Avatar billede krismort Nybegynder
26. juli 2005 - 01:04 #11
jo men jeg skulle helst have mulighed for at reagerer på når der bliver skrevet noget til strømmen som var det et socket. Er det ikke muligt at lade programmet vente indtil der bliver skrevet noget til den pipe ?
Avatar billede arne_v Ekspert
26. juli 2005 - 08:24 #12
du vil lave noget multithreaded ?

en tråd skriver til pipe

en anden tråd læser fra pipe
Avatar billede krismort Nybegynder
26. juli 2005 - 12:36 #13
ja jeg tror at det som du beskriver ovenfor vil være den bedste løsning.
Avatar billede arne_v Ekspert
27. juli 2005 - 18:20 #14
Win32 threads (Windows) eller Posix threads (Linux) ?
Avatar billede krismort Nybegynder
28. juli 2005 - 09:21 #15
Win32 threads
Avatar billede arne_v Ekspert
03. september 2005 - 18:58 #16
jeg håber ikke at du har ventet på et tråd eksempel fra mig

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester