August 2, 2001
On 2001-09-29 17:45, Sharok wrote:
Hur kör man ett externt program i C++?
Och hur kör man det utan att en ny ruta poppar upp?
Fattar inte riktigt vad du menar?
Dessutom undrade jag hur man kan ta vara på informationen man får tillbaka från program som Ping eller Tracert?
Du borde ju gå att pipea (hur det nu stavas till något program och göra något kul med det.
September 20, 2001
Med externt program menar jag typ om du gör ett program som ska förbättra din internet hastighet så kanske man ska kunna pinga en sajt för att se om det hastigheten har förbättrats..
Och med det andra menar jag inte VAD man kan göra utan HUR man får tillbaka sakerna.
August 2, 2001
Jag slängde ihop en litet program som funkar under Unix/Linux, det kanske inte var den smartaste lösningen men en som jag kom på för tillfället. Den funkar dock inte under Windows eftersom dup2, pipe och fork är opertivsystem anrop.
Det enklaste vore om du skaffade typ ping, och traceroute som biblioteksrutiner så att du på ett enkelt sätt kan få tillbaka informationen istället för att hålla på med pipes.
Kompilerat med g++
P.S funkar inte helt perfekt fastnar i while slingan när det inte finns något mer att läsa, men det kan du nog fixa själv.
#include
#include
#include
#include
#define READ 0
#define WRITE 1
int main(int argv, char* argc[]) {
int status, fd_1[2], pid_1;
char* pingargv[10] = {"ping", "aftonbladet.se", (char*) 0};
if(pipe(fd_1) != 0) { /*skapa en pipe se man pipe */
perror("error creating pipe");
exit(1);
}
pid_1 = fork(); /*forka fram en ny process */
if(pid_1 == -1) {
perror("error first fork");
exit(1);
}
else if (pid_1 == 0) {/*child process*/
if(dup2(fd_1[WRITE], 1) < 0) //dirgera om stdout till fader processens
perror("error vid omdirigering av stdout i child"), exit(1);
close(fd_1[READ]);
close(fd_1[WRITE]);
if( execvp("ping", pingargv) == -1) //ersätt child processens program
text med ping och kör med pingargv
exit(2);
}
/*parent process ditt huvud program Hit kommer endast parent*/
char indata[100];
printf("child %d diedn", (int) wait(&status)); //invänta att childprocessen är klar dvs att ping har avslutats innan du fortsätter
if(dup2(fd_1[READ], 0) < 0) /*dirigera om stdin*/
perror("error omdirgering av huvudprogrammets lässida");
fgets(indata, sizeof(indata), stdin); //läs data från pingprogrammet
printf("__%s__n", indata); //skriv ut data från ping programmet här ska du göra något kul med informationen från ping troligen behöver du skriva någon liten parser som tar fram den infon du vill ha
while (indata != 0){
fgets(indata, sizeof(indata), stdin);
printf("__%s__n", indata);
}
close(fd_1[READ]);
close(fd_1[WRITE]);
return 0;
}
[ Detta Inlägg ändrades av: paul_v den 2001-09-30 16:19 ]
[ Detta Inlägg ändrades av: paul_v den 2001-09-30 16:19 ]
August 2, 2001
Printf fyller ingen direkt funktion, utan användes endast som en kontroll att programmet fungerade, dvs det skrev ut det ping brukar skriva ut.
The C way
int age = 93;
char *name = "tomten"
printf("Hej jag är %d år gammal och heter %s ", age, name)
Här så "byts" %d ut mot age och %s mot name
%ngt anger vad för typ det är som ska skrivas ut
ex. %d och %i anger en int
%c en char osv
The C++ way
int age = 93;
string name = "tomten"
cout << "Hej jag är " << age " år gammal och heter " << name;
[ Detta Inlägg ändrades av: paul_v den 2001-09-30 17:06 ]
2 Guest(s)