Read con codice

di il
2 risposte

Read con codice

Salve a tutti qual è un possibile errore per cui la system call "read" non funziona?

questo è il codice

//Scrivere un programma C, chiamiamolo myedit.c, che ricevendo in input il nome di un file ed un intero x, si comporti nel seguente modo:

// 1)scriva sullo standard output gli ultimi x byte del file se il file già esiste , altrimenti crei il file con i permessi 644;

//2)legga dallo standard output altri dati che l'utente vuole inserire alla fine del file e li scriva in tale file

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>


int main(int argc, char *argv[]){
int fd,offset,y;
signed int x;
char buf[4];
if (argc!=3) {
printf("ERRORE : Numero parametri 3 --> eseguibile,nome file, intero x\n");
exit(0);
}//fine if

if( (fd=open(argv[1],O_WRONLY))>0){
printf("Il suo file descriptor è %d \n",fd);
x=atoi(argv[2]);
printf("aa2\n");
offset=lseek(fd,-x-1 ,SEEK_END);
printf("il nuovo valore di offset è %d \n",offset);
if( (read(fd,&buf,3)) <0) printf("ERRORE\n"); // qui da sempre errore
write(1,buf,x);
}
else {
printf("SOnO nell'else\n");
umask(0);
fd=creat("myedit", S_IRWXU|S_IXGRP|S_IXOTH);
printf("Il suo file descriptor all'atto della creazione è %d \n",fd);
}

lseek(fd, 1, SEEK_END);
printf(" DIGITARE CONTENUTO : \n");
read(1,&buf,4);
write(fd,&buf,4);
system("cat myedit");
return 0;
}//fine main

2 Risposte

  • Re: Read con codice

    Potrebbe essere che:
    -il file descriptor che gli passi è errato, magari nella open il pathname del file l'hai sbagliato oppure non hai i diritti di accesso;

    -il buffer di output non l'hai allocato.

    Magari se posti il pezzo di codice in cui la usi, ti posso aiutare meglio
  • Re: Read con codice

    L'errore sta nel fatto che tu apri il file in modalità "solo scrittura" (O_WRONLY vuol dire "solo scrittura"), invece, visto che dal file devi sia leggere che scrivere, devi aprirlo in modalità "sia lettura che scrittura", ovvero "O_RDWR"

    ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte