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.
#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 -
Boooring -
De totes maneres, fopen també es de POSIX perquè entra en l'ANSI :).
Tomeu -
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 -
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 -
Sorry ...
Tomeu -
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);
}
}