Discussion:
problemas con 'read'
(demasiado antiguo para responder)
juanman80
2003-10-29 20:05:54 UTC
Permalink
Buenas,
En una asignatura tengo que simular un sistema de ficheros en un archivo de
Linux. Estaba probando cómo funcionaba la entrada salida a bajo nivel con
el siguiente código en C.He hecho pruebas con write y lseek, y no he tenido
problemas. Pero con la función read, el ejecutable me da el error "Invalid
argument"... No sé si lo estoy entendiendo mal, pero los argumentos del
read son los que pone el man, no?
bueno, si alguien me puede ayudar...
muchas gracias

****************
main(void)
{
int fd, nop, nwr, nrd, ini;
char *nom="a.dat";
char *buf;

fd=open("a.dat",O_RDONLY,0);
if (fd<0){
printf("Error apertura archivo %s\n", nom);
} else {
nop=3;
nrd=read (fd, buf, nop);
if (nrd!=nop)
printf("Error %s en lectura archivo %s\n", strerror(errno), nom);
else
printf("Lectura correcta archivo %s, leido %s\n", nombre, buf);
close(fd);
}
}
****************
--
Juanma
juanman80 at yahoo dot es

-------------------------------------------
Antonio M. Estévez
2003-10-29 23:49:10 UTC
Permalink
En primer lugar, debes reservar memoria para el puntero buf antes de usarlo:

nop= 3;
buf= (char*)malloc(nop);
nrd= read(fd, (void*)buf, nop);
.
.
.
free(buf);
Post by juanman80
Buenas,
En una asignatura tengo que simular un sistema de ficheros en un archivo de
Linux. Estaba probando cómo funcionaba la entrada salida a bajo nivel con
el siguiente código en C.He hecho pruebas con write y lseek, y no he tenido
problemas. Pero con la función read, el ejecutable me da el error "Invalid
argument"... No sé si lo estoy entendiendo mal, pero los argumentos del
read son los que pone el man, no?
bueno, si alguien me puede ayudar...
muchas gracias
****************
main(void)
{
int fd, nop, nwr, nrd, ini;
char *nom="a.dat";
char *buf;
fd=open("a.dat",O_RDONLY,0);
if (fd<0){
printf("Error apertura archivo %s\n", nom);
} else {
nop=3;
nrd=read (fd, buf, nop);
if (nrd!=nop)
printf("Error %s en lectura archivo %s\n", strerror(errno), nom);
else
printf("Lectura correcta archivo %s, leido %s\n", nombre, buf);
close(fd);
}
}
****************
--
Juanma
juanman80 at yahoo dot es
-------------------------------------------
J.A. Gutierrez
2003-10-30 07:26:19 UTC
Permalink
juanman80 <***@uib.es> wrote:

: En una asignatura tengo que simular un sistema de ficheros en un archivo de
: Linux. Estaba probando cómo funcionaba la entrada salida a bajo nivel con

tienes un ejemplo en
http://persephone.cps.unizar.es/~spd/libfs.html


Ten en cuenta que en general, en Unix interesa leer el dispositivo
por bloques de tama~no fijo; lo que es diferente de cuando lees
de un fichero. Puede que te interese hacer asi tu programa.

: main(void)

deberia ser int main(int argc, char **argv)

: {
: int fd, nop, nwr, nrd, ini;
: char *nom="a.dat";
: char *buf;

vale, y el espacio para "buf"? Casi mejor usa char buf[BUFSIZ];

: fd=open("a.dat",O_RDONLY,0);

para que el "0" ?

: if (fd<0){
: printf("Error apertura archivo %s\n", nom);

mejor usar perror()


Tienes ejemplos de uso de read y comparaciones con otros
metodos en:

http://phoebe.cps.unizar.es/~spd/src/files-dirs/cp/
--
finger ***@shiva.cps.unizar.es for PGP /
.mailcap tip of the day: / La vida es una carcel
application/ms-tnef; cat '%s' > /dev/null / con las puertas abiertas
text/x-vcard; cat '%s' > /dev/null / (A. Calamaro)
Loading...