PDA

View Full Version : Esercizio in C e system call unix


MrEnrich
03-04-2004, 15:09
dovrei risolvere questo esercizio in C, mi scrivete una soluzione?
grazie

"Prendere un input da tastiera e scaricarlo in FILE1
Copiare in ordine inverso il contenuto di FILE1 in FILE2
utilizzando read e write"

fpucci
03-04-2004, 19:07
Perché non provi a buttare giù TU una soluzione e poi vediamo quello che si può fare?

L'esercizio lo devi fare tu, noi possiamo darti sicuramente una mano. Ma addirittura pretendere di risolvertelo.....;)

O no?

MrEnrich
04-04-2004, 02:28
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{

int fdin, fdout, n;
int c, buf[90];

if((fdin=open("FILE1",O_RDWR|O_CREAT|O_TRUNC,0644))<0) //Crea FILE1

printf("FILE1 open error\n"); //in modalita' read-write

if((fdout=open("FILE2",O_CREAT|O_RDWR|O_TRUNC,0644))<0) //Apre il file

printf("FILE2 open error\n"); //in cui copiare in modalita' write-only

n=read(STDIN_FILENO,buf,90); //leggo da standard input
write(fdin,buf,n); //scrivo su FILE1
n=lseek(fdin,-1,SEEK_END); //mi posiziono alla fine di FILE1

while ( n >= 0) {
read(fdin, &c, 1);
write(fdout, &c, 1);
n=lseek(fdin,-2,SEEK_CUR);
}

lseek(fdout,0,SEEK_SET);

while ( read(fdout, &c, 1) > 0)
write(STDOUT_FILENO, &c, 1);

exit(0);
}
---------------------------------------------------------------------

ho questa soluzione, ci sono alternative a questa?

cionci
04-04-2004, 07:42
Hai la firma irregolare... La dimensione massima dell'imamgine è 100x50... Puoi correggere ? Grazie ;)

MrEnrich
07-04-2004, 03:14
allora? altre soluzioni?

cionci
07-04-2004, 07:48
Fa esattemente quello che chiedevi...allora è giusta ;)

MrEnrich
07-04-2004, 11:10
Originariamente inviato da cionci
Fa esattemente quello che chiedevi...allora è giusta ;)

e grazie :rolleyes:
volevo sapere se esistono ALTRE soluzioni

cionci
07-04-2004, 11:12
Originariamente inviato da MrEnrich
e grazie :rolleyes:
volevo sapere se esistono ALTRE soluzioni
Hai usato read e write ? Fa quello che volevi ? Quindi è giusta...
Potrei scriverti 100 programmi diversi che fanno la stessa cosa, ma si baserebbero sempre sullo stesso principio...

MrEnrich
07-04-2004, 11:26
Originariamente inviato da cionci
Hai usato read e write ? Fa quello che volevi ? Quindi è giusta...
Potrei scriverti 100 programmi diversi che fanno la stessa cosa, ma si baserebbero sempre sullo stesso principio...

e dai.. scrivemene uno solo... piccolo piccolo... :)
te ne sarei molto grato...;)

cionci
07-04-2004, 11:29
Ma va bene come l'hai scritto tu ;) Cambierebbe solo quello che c'è nel contorno...il codice saliente rimarrebbe comunque quel ciclo :)

MrEnrich
07-04-2004, 11:49
Originariamente inviato da cionci
Ma va bene come l'hai scritto tu ;) Cambierebbe solo quello che c'è nel contorno...il codice saliente rimarrebbe comunque quel ciclo :)

ok... te ne posso proporre un altro? :

scrivere un programma c (myedit.c) che ricevendo in input il nome di un file ed un intero x si comporti nel seguente modo:

1) scriva sullo standart output gli ultimi x byte del file se il file già esiste; altrimenti crei il file con i permessi di accesso 644;

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