PDA

View Full Version : nn riesco a fare questo prog


khri81
27-04-2005, 17:12
nn capisco cosa ci sia che nn vada mi serve il vostro aiuto:

devo fare un prog che mi trovi queste info da linux nella dir /proc, e un banalissimo prog che apre un file che si chiama /proc/uptime

xò nn riesco a farlo andare vi posto il listato:


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define MAXBUFFER 80

int main(int argc, char *argv[])
{
FILE *fd;
//int letti,fd;
char buffer[MAXBUFFER], repTypeName[16];

//strcpy(repTypeName,"STANDARD");

//apertura file
fd = open("/proc/uptime",O_RDONLY);
if (fd == -1)
{
printf("errore apertura file\n");
exit(-1);
}

//ciclo di lettura file
while(!eof(fd))
{
read(fd,buffer,MAXBUFFER);
printf("%s\n", buffer);
}

}

cionci
27-04-2005, 18:12
Fai almeno questa correzione:

letti = read(fd,buffer,MAXBUFFER-1);
buffer[letti] ='\0';

DanieleC88
27-04-2005, 19:03
Fai almeno questa correzione:

letti = read(fd,buffer,MAXBUFFER-1);
buffer[letti] ='\0';
Non dovrebbe essere necessario. Quale errore ti da, khri?

khri81
27-04-2005, 19:38
sono riuscito a correggere il fatto è che nn sono abituato ad usare read e write con i file e diversamente da altre funzioni richiedono restituiscono un intero invece che il puntatore al file stava li il mio errore.

adesso ho questo problema dove devo usare la funzione gettimeofday come faccio a stampare il valore che restituisce con printf????

cosa devo usare %s, %d?????? cosa nn lo so.

sapete mica indicarmi un sito dove ci stanno tutte le varie funzioni in c e relative spiegazioni???

VICIUS
27-04-2005, 19:42
sono riuscito a correggere il fatto è che nn sono abituato ad usare read e write con i file e diversamente da altre funzioni richiedono restituiscono un intero invece che il puntatore al file stava li il mio errore.

adesso ho questo problema dove devo usare la funzione gettimeofday come faccio a stampare il valore che restituisce con printf????

cosa devo usare %s, %d?????? cosa nn lo so.

sapete mica indicarmi un sito dove ci stanno tutte le varie funzioni in c e relative spiegazioni???
prova con man nome funzione oppure leggiti la documentazione di libc http://www.gnu.org/software/libc/manual/html_node/ :)

ciao ;)

Edit:
Il codice puo essere migliorato un po se ci guardi molte cose non servono.

#include <fcntl.h>

#define BUFFER_LEN 80

int main (int argc, char **argv)
{
int fd, letti = 0;
char buff[BUFFER_LEN];

if ((fd = open ("/proc/uptime", O_RDONLY)) < 0) {
printf ("bum !");
exit (-1);
}

while ((letti = read (fd, buff, BUFFER_LEN)) > 0)
write (0, buff, letti);
}

cionci
27-04-2005, 20:05
Non dovrebbe essere necessario. Quale errore ti da, khri?
Sì che è necessario...read non mette il terminatore,,,

DanieleC88
27-04-2005, 20:21
Sì che è necessario...read non mette il terminatore,,,
Ah, e io che ne so? Al massimo uso fgets(). :D
E con i files non ci lavoro molto.

fbcyborg
30-04-2005, 09:15
while ((letti = read (fd, buff, BUFFER_LEN)) > 0)
write (0, buff, letti);
Scusa, ma nella write, perchè scrivi sullo standard input? Hai per caso duplicato il file descriptor da qualche parte...?
se non sbaglio:
0 Standard Input;
1 Standard Output;
2 Standard Error;

probabilmente, se non ho capito male il codice nella write bisognava mettere 1 al posto dello 0.

VICIUS
30-04-2005, 10:52
Scusa, ma nella write, perchè scrivi sullo standard input? Hai per caso duplicato il file descriptor da qualche parte...?
se non sbaglio:
0 Standard Input;
1 Standard Output;
2 Standard Error;

probabilmente, se non ho capito male il codice nella write bisognava mettere 1 al posto dello 0.
Ho scritto il programmino in fretta e non ci ho guardato cosi ho scritto il primo numero che mi è venuto in mente. Comunque si il programma voleva scrivere su stdout. Avrei potuto usare fileno ed evitare ogni problema ma ci ho pensato solo dopo. :muro:

ciao ;)

fbcyborg
30-04-2005, 11:13
;) ;) ;)
eheh... a volte capita!!!

CiaoCiao!