Blogia
Geeks i d'altres

Un intent d'emulació de la comana cat

Fa una estona m'aburria, i tenia el nano i el gcc a mà, i aixó és el que n'ha sortit d'aquesta mescla explosiva;

#include

int main(int argc, char *argv[])
{
char caracter, buffer[256];
FILE *fichero;

if (argc != 2)
{
while(1) //Bucle infinito
{
fgets(buffer,256,stdin);
printf("%s",buffer);
}

return 1;
}

fichero=fopen(argv[1],"r");

while(caracter != EOF)
{
caracter = fgetc(fichero);
printf("%c",caracter);
}

fclose(fichero);
return 1;
}


Necesit crítiques constructives per part de programadors de bon de veres ... alguna funció mal emprada? Se li hauria de fer algun hack? Alguna falla important?
Ara que m'ho mir una mica, hauria de posar cualque comentari (encara que sigin tan poques linies :P), que després agafaré mal vicis.

6 comentarios

Bernat -

Ets de puta mare!! En ser gran vull ser com tu!! Dir-te k ets es millor amic k tenc, i k crec k tendré en sa vida.... Quan me pos a recordar es bons moments(i dolents tmb) k hem passat junts, disfrut de pensar. Segueix endavant i tira milles... Cuida't!!! Besitos princesa! Llraga vida al heavy!! SI LOS PENSAMIENTOS, SI LO K PASA X LA CABEZA FUESE MUSICA, YO PIENSO EN ROCK!!!! bye!!! hiel mi führer!!!

Boooring -

Passat per www.cplusplus.com o alguna web d'aquestes. Tenen les llibreries estàndar ben documentades ;).
De totes maneres, fopen també es de POSIX perquè entra en l'ANSI :).

Tomeu -

Home en les cridades a sistema POSIX, el FILE_DESCRIPTOR és un enter de tota la vida. Mira les especificacions "man 2 read".
No, mira en l'enter no es "guarda" el fitxer si no que el sistema torna un identificador el qual es guarda dins una taula del proces la qual conté identificadors "enters" de cada fitxer obert que hi ha. El sistema operatiu llavors associal l'ID amb l'i-node corresponent.

servomac -

M'agrada molt aquest codi!
Pero tenc un petit dubte .. és pot emprar un int com a descriptor de ficher? Com que declares fd com a int, i després el fas servir per "guardar-hi" el fichero .. supos que deu ser cosa de la funció open.
Gracies per aquesta versió!!

Tomeu -

Uii, hi ha un fallo als paràmetres del signal res -> acagar ...

Sorry ...

Tomeu -

Aqui tens una versió un poc tocadora d'ous i programada amb standard POSIX, a veure que et pareix ...

int main(int argc, char **argv)
{
void acagar() { }
char buf[256];
int fd,n;

signal(2, res);signal(9, res);

if(argc!=2)
while(1) { n = read(0, buf, sizeof(buf)); write(1, buf, n); }
else {
fd = open(argv[1], 0);
while ((n = read(fd, buf, sizeof(buf))) > 0) { write(1, buf, n); }
close(fd);
}
}