Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Wat wil je opvangen? De uitvoer van het programma dat je opstart?
Probeer dit eens in uw shell
en denk eens na hoe je dat zou kunnen implementeren in uw C programma.
Probeer dit eens in uw shell
code:
1
| ls -l > testbestand.txt |
en denk eens na hoe je dat zou kunnen implementeren in uw C programma.
https://fgheysels.github.io/
nee ik wil mijn hd niet gebruiken !
het is voor op een server, ik wil uptime, de tijd die nog resteerd voor dat de isdn verbinding word verbroken ed. via tcp/ip versturen.
Het liefst maak ik gebruik van system calls (kosten het minst)
maar het moet toch mogelijk zijn de uitvoer rechtstreeks op te vangen ?
het is voor op een server, ik wil uptime, de tijd die nog resteerd voor dat de isdn verbinding word verbroken ed. via tcp/ip versturen.
Het liefst maak ik gebruik van system calls (kosten het minst)
maar het moet toch mogelijk zijn de uitvoer rechtstreeks op te vangen ?
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
ik zie dat in /usr/include/protocols/rwhod.h
een struct staat.
maar hoe kan ik deze struct nou gevuld krijgen en vervolgens uitlezen ?? ik zie in deze .h geen functie die deze struct retourneerd
een struct staat.
code:
1
2
3
4
5
6
7
8
| struct whod {
char wd_vers;
char wd_type;
....enz.
int wd_loadav[3]; /*load avarage as in uptime*/
int wd_boottime; /* time system booted */
...bbla bla
}; |
maar hoe kan ik deze struct nou gevuld krijgen en vervolgens uitlezen ?? ik zie in deze .h geen functie die deze struct retourneerd
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
het gaat om een server.c die constant draait.Op zaterdag 25 mei 2002 19:36 schreef Jan_Klaassen het volgende:
Gebruik pipes.
hoe kan ik dan ooit pipes gebruiken ?
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
pipes zijn "gewoon" files waarin je van de ene kant data instopt en van de andere kant uitleest..
Je leest dus constant (via een select() dus) de pipe uit, terwijl je af en toe (via een sigalarm oid) via system ("uptime > mypipe") data de pipe instopt.
Je leest dus constant (via een select() dus) de pipe uit, terwijl je af en toe (via een sigalarm oid) via system ("uptime > mypipe") data de pipe instopt.
Yo dawg, I heard you like posts so I posted below your post so you can post again.
Verwijderd
popen () is wat je hebben moet
je krijgt een FILE pointer terug die je met bijvoorbeeld fscanf kan uitlezen
je krijgt een FILE pointer terug die je met bijvoorbeeld fscanf kan uitlezen
je creeert eerst een pipe, daarna een childproces met fork (). In dat child proces zet je de stdout naar de schrijfkant van de pipe (met dup2 ()), en vervolgens start je het programma met een van de exec () functiesOp zaterdag 25 mei 2002 20:00 schreef xychix het volgende:
[..]
het gaat om een server.c die constant draait.
hoe kan ik dan ooit pipes gebruiken ?
en in je parent proces kun je de pipe uit gaan lezen
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
man popenik wil het commando uptime uitvoeren (ik draai freebsd, deze heeft niet zoveel info in /proc staan!)
ik wil alleen niet als in:
int system(const char *s);
een integer terug hebben maar een char *
ehhm.. ik heb het gelezen.. had ik jullie al verteld dat ik een beginnende C programmeur was ? maar goed ik ga er gewoon mee aan de slag..Op zondag 26 mei 2002 01:35 schreef igmar het volgende:
[..]
man popen
ff googelen op popen()+uptime levert vast een klein stukkie voorbeeld code op..
thanks.
--edit--
zo lijkt het idd. niet zo moeilijk meer ! thanks voor de popen() tip!
code:
1
2
3
4
5
6
7
8
9
10
11
| FILE *p=popen("uptime","r");
if (!p) {
perror("popen");
if (verbose) printf("Collecting load stats failed.\n");
if (verbose) printf("Terminating child...\n");
kill (pid,SIGTERM);
exit(2);
}
fgets(buf,sizeof(buf),p);
pclose(p); |
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Verwijderd
kan je in c niet zoiets als:
$uptime=`uptime` (zoals bij perl) ? (ik ken bijna geen C, maar misschien helpt het?)
$uptime=`uptime` (zoals bij perl) ? (ik ken bijna geen C, maar misschien helpt het?)
nog 1 post voor de newbie's die na mij ook nog met dit probleem zitten:
probeer deze code eens.
het enige waar ik nog mee zit. als ik niet alles in een (lokale) buf gooi maar in fuctie argument buffer dan krijg ik maar 3 !!! tekens terug !
probeer deze code eens.
het enige waar ik nog mee zit. als ik niet alles in een (lokale) buf gooi maar in fuctie argument buffer dan krijg ik maar 3 !!! tekens terug !
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <string.h>
int verbose=1;
char* execute(const char * commando,char * buffer)
{
char buf[3200];
float load;
FILE *p=popen(commando,"r");
if (!p)
{
perror("popen");
if (verbose) fprintf(stdout,"Something went wrong while reading the commands output.\n");
exit(2);
}
fgets(buf,sizeof(buf),p);
pclose(p);
if (verbose) printf("Incoming string: %s\n",buf);
strcpy(buffer,buf);
return(buffer);
}
main()
{
char buffer[32000];
printf("%s",execute("cat /etc/passwd | grep root",buffer));
} |
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Pagina: 1