C++|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
C++
_BiG_HeaD_
Kommer du hit ofta?
Medlem
Forum Posts: 379
Member Since:
September 20, 2001
sp_UserOfflineSmall Offline
1
September 29, 2001 - 3:45 pm
sp_Permalink sp_Print

Hur kör man ett externt program i C++?
Och hur kör man det utan att en ny ruta poppar upp? Dessutom undrade jag hur man kan ta vara på informationen man får tillbaka från program som Ping eller Tracert?

_paul_
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 126
Member Since:
August 2, 2001
sp_UserOfflineSmall Offline
71611
September 29, 2001 - 5:55 pm
sp_Permalink sp_Print

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 wink till något program och göra något kul med det.

_BiG_HeaD_
Kommer du hit ofta?
Medlem
Forum Posts: 379
Member Since:
September 20, 2001
sp_UserOfflineSmall Offline
71634
September 29, 2001 - 6:54 pm
sp_Permalink sp_Print

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.

_paul_
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 126
Member Since:
August 2, 2001
sp_UserOfflineSmall Offline
72046
September 30, 2001 - 2:17 pm
sp_Permalink sp_Print

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 ]

_BiG_HeaD_
Kommer du hit ofta?
Medlem
Forum Posts: 379
Member Since:
September 20, 2001
sp_UserOfflineSmall Offline
72056
September 30, 2001 - 2:41 pm
sp_Permalink sp_Print

Tack så mycket.. Nu undrar jag vad printf e ? Jag har läst C++ och lite C.. Jag vet att man skriver ut saker med printf men vad är alla dessa %d och så? Inte bara här utan överallt!

_paul_
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 126
Member Since:
August 2, 2001
sp_UserOfflineSmall Offline
72064
September 30, 2001 - 3:04 pm
sp_Permalink sp_Print

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 ]

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 397
Currently Browsing this Page:
2 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL