|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2004
Messaggi: 8
|
perche non funziona?
perche non mi funziona questo semplice costrutto in c di scrittura a basso livello(il file viene creato ma non si apre),
#include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> struct alunno{ char nome[100]; char cognome[100]; int eta; }; main() { struct alunno alunno; int nalunni; int fd; fd = open("alunni", O_CREAT|O_WRONLY,66); printf("inserici il nome?"); scanf("%s", alunno.nome); printf("inserici il cognome?"); scanf("%s", alunno.cognome); printf("inserici il eta?"); scanf("%d", alunno.eta); write(fd, &alunno, sizeof(struct alunno)); close(fd); } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: perche non funziona?
Magari per questo:
fd = open("alunni", O_CREAT|O_WRONLY,0660); |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: May 2004
Messaggi: 8
|
nulla
non funziona neanche in questo modo c'e' un errore nel file
ma il procedimento è corretto |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi compila o non compila ?
struct alunno alunno; Magari cambia il nome o alla struttura o alla variabile... |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
WFM (dopo aver corretto 66 -> 0660)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: May 2003
Messaggi: 119
|
devi fare
scanf("%d", &alunno.eta); e non scanf("%d", alunno.eta); la scanf vuole un indirizzo su cui scrivere il valore |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: May 2004
Messaggi: 8
|
ho provato in tutti i modi possibili
innanzi tutto sto provando questo costrutto su linux, il compilatore
non mi segnala errori, il file lo crea ma non è possibile aprirlo(non è un file corretto) allora mi sorge un dubbio forse bisogna #includere qualche altra cosa o pure manca qualcosa sul mio redhat 8 non so..... i vostri suggerimenti li ho applicati ho corretto i permessi di lettura e scrittura (0660)ho cambiato il nome della struttura alunno,ho aggiunto la mancanza della "&" nello scanf finale e molto altro boooooooooooo grazie a tutti del vostro aiuto ragazzi!!! se avete altri suggerimenti scrivete pure. |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: ho provato in tutti i modi possibili
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mmmmhhh...ma se scrivi dalla shell:
vi alunni Cosa succede ? |
|
|
|
|
|
#11 |
|
Junior Member
Iscritto dal: May 2004
Messaggi: 8
|
praticamente
allora vi spiego meglio il problema: ditemi se sbaglio qualcosa.
innanzitutto apro "Kate" scrivo il costrutto ed salvo il documento in qualsiasi nome.C ,poi apro il terminale compilo con gcc -o nomefile nomefile.c ed apro il programma (sempre da terminale) con . /nomefile OK poi il problema del file che non mi si apre è questo: una volta salvato nome, cognome, eta il programma da terminale si chiude e mi crea un file in /root con il nome da me dato "anag" quando tento di aprirlo invece di farmi vedere il contenuto del file (cioe nome cognome eta) si apre una finestra che mi indica con quale applicazione voglio visualizzare il file (o meglio APRI CON mentre correttamente si dovrebbe visualizzare il file creato.{CHE IO SAPPIA} thank |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: praticamente
Quote:
Il file che crei è un file binario con dati generici, non riconducibile a nessun tipo conosciuto. Con cosa te lo dovrebbe aprire?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#13 |
|
Junior Member
Iscritto dal: May 2004
Messaggi: 8
|
allora a cosa serve se non posso visualizzare il file
cioe se io creo un file è perche voglio memorizzare dentro dei dati per poi rivederli(non prendere in esempio questo costrutto) se mi crea un file binario cosa ci faccio, o meglio c'e' un modo per creare un file inserire dati che posso rivedere grazie di tutto. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sì, puoi creare un file di testo se vuoi.
Ad esempio sostituisci l'ultima write con queste righe: dprintf(fd, "nome=%s\n", alunno.nome); dprintf(fd, "cognome=%s\n", alunno.cognome); dprintf(fd, "età=%d\n", alunno.eta); Il file creato puoi ora aprirlo con un qualsiasi editor di testi, da vi a Word.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
fd = open("alunni.txt ", O_CREAT|O_WRONLY,66);
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Se usa un file manager intelligente non è necessario neanche appendere .txt al file
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
eh ma se nn aggiunge qualche estensione alla fine cliccando due volte sul file apparirà sempre la finestra APRI CON..., se era questo di cui si lamentava
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
ah non avevo letto linux sorry
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Oppure (e vuole essere una alternativa) potresti fare:
Codice:
#include<stdio.h> /* <--- Modifica */
#include<memory.h> /* <--- Modifica */
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
struct alunno{
char nome[100];
char cognome[100];
char eta [4]; /* <--- Modifica */
};
main()
{
struct alunno alunno;
int fd;
fd = open("alunni", O_CREAT|O_WRONLY, 0660); /* <--- Modifica */
memset ((char *) &alunno, 0, sizeof (alunno)); /* <--- Modifica */
printf("inserici il nome?");
scanf("%s", alunno.nome);
printf("inserici il cognome?");
scanf("%s", alunno.cognome);
printf("inserici il eta?");
scanf("%s", alunno.eta); /* <--- Modifica */
write (fd, &alunno, sizeof(struct alunno));
close(fd);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:30.



















