Avatar billede kjoller Nybegynder
08. maj 2005 - 10:06 Der er 8 kommentarer og
1 løsning

Fang det som en system("program") smidder ud

Jeg har lavet et lille program som skriver nogle ting på skærmen, men da jeg også gerne vil have det til at virke fra et webinterface, så kalder jeg det via en system(""), nu er problemet jo det at den skriver det ud på skærmen serverside er der ikke en eller anden måde jeg kan fange den tekst fra skærmen den smidder ud?

Det er på en OpenBSD 3.6
Avatar billede arne_v Ekspert
08. maj 2005 - 10:15 #1
kig på popen
Avatar billede arne_v Ekspert
08. maj 2005 - 10:15 #2
eksempel:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *cmd = "ditprogram arg1 arg2";
  char buf[1000];
  FILE *ptr;
  if ((ptr = popen(cmd, "r")) != NULL)
  {
      while (fgets(buf, sizeof(buf), ptr) != NULL)
      {
            printf("%s", buf);
      }
      pclose(ptr);
  }
  return 0;
}
Avatar billede kjoller Nybegynder
08. maj 2005 - 10:20 #3
skal lige finde pipestream.h
Avatar billede kjoller Nybegynder
14. maj 2005 - 03:30 #4
jeg kan ikke finde pipestream.h til OpenBSD
Avatar billede arne_v Ekspert
14. maj 2005 - 10:43 #5
hvordan ser din kode ud og hvordan compiler du ?

popen burde være i stdio.h og alt den inkluderer burde være der
Avatar billede bertelbrander Novice
14. maj 2005 - 12:58 #6
popen er ikke en standard C/C++ funktion, og behøver derfor ikke være der.
Avatar billede arne_v Ekspert
14. maj 2005 - 13:11 #7
ikke ifølge ANSI C

men på en BSD Unix så skal den være der
Avatar billede kjoller Nybegynder
14. maj 2005 - 14:24 #8
nu sad jeg og gik helt kold i nat så jeg laved en del om, men mener den så såddan her ud:


void* serveClient( void* socket )
{

char buffer2[1000];
char *buffer;
buffer="<html><head></head><body>test</body></html>";
char host[200];
char return_;

char str [20];
int i;
char zero;
 
printf( "server kaldt\n" );

for(;;) {
    read( (int)socket, buffer2,  1000);
    write( (int)socket, buffer, strlen(buffer) );
    locate(buffer2, "host=", host);
    locate(host, " ", host);
    system("scan host.com");
    write( (int)socket, host, strlen(host) );
    printf("\n");
    string port_;
    close( (int)socket );
    pthread_exit( NULL );

}

}

Med følgende includes:
#define _REENTRANT
#include <stdio.h>
#include <stdlib.h>   
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>
#include <unistd.h>
#include <string>
#include <iostream>
#include <netdb.h>
Avatar billede kjoller Nybegynder
23. juni 2005 - 00:42 #9
Lukket
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



Seneste spørgsmål Seneste aktivitet
I går 17:10 Joomla artikler Af rmadsen80 i CMS-systemer
I går 16:54 Printervalg til kontor Af tumben i Printere
I går 15:08 Http client med X509Certificate2 Af joki i C#
I går 13:02 Hjemmenetværk Af Andfer i LAN/WAN
I går 11:17 Chrombook Af lurup i Andre styresystemer


White paper
Tidsbegrænset kampagne: Overvejer du at udskifte eller tilføje printere i din forretning? Vi kan tilbyde én eller flere maskiner gratis