[C] Pogramma a Livello Sistema UNIX - ESERCIZIO

di il
3 risposte

[C] Pogramma a Livello Sistema UNIX - ESERCIZIO

Uongiorno ragazzi, sono alle prime armi con Sistemi Operativi e ho creato questo nuovo Topi xchè non riesco a sviluppare completamente neanche i primi esercizi del corso di Laboratorio
Please aiutatemi xchè mi funziona tutto, l'input ed anche il calcolo matematico, ma l'ultima write che dovrebbe stampare sul dispositivo di output, ovvero STDOUT_FILENO

ESERCIZIO 1
Scrivere un programma C che:
• Prende in input coppie di interi utilizzando la system call read
• Calcola la somma degli interi
• Stampa a video il risultato utilizzando la write
• Termina quando il primo input e' -1
• Assumere che gli interi consistano di una sola cifra


#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>

#define BUFSIZE 4000
int main (int argc, char *argv[])
{
int n1,n2,somma;
int int1,int2;
char buff[2];
printf("Inserire primo intero\n");
n1=read(STDIN_FILENO,buff,BUFSIZE);
somma=atoi(buff);
printf("sizeSomma1=%d\n",sizeof(somma));
printf("somma=%d\n",somma);
printf("Inserire secondo intero\n");
n2=read(STDIN_FILENO,buff,BUFSIZE);
somma=somma+atoi(buff);
printf("sizeSomm2a=%d\n",sizeof(somma));
printf("somma=%d\n",somma);
//buff=(char*)somma;
//buff=itoa(somma);
somma=sizeof(somma);
printf("sizeSomma3=%d\n",sizeof(somma));
//buff=(char *)somma;
write(STDOUT_FILENO,somma,sizeof(somma));
}
Quindi
- Le read() mi funzionano bene entrambe
- idem per l'atoi()
- la write() per scrivere su schermo non ha alcun effetto ma è probabile che sbaglio io nell'ignoranza del principiante.

Raga lo so che è il più scemo di tutti gli esercizi, ma se neanche questo riesco a farlo completo non voglio immaginare all'esame
il programma non dà errori di compilazione, tuttavia non mi esegue la write , mentre con printf riesco a stampare l'output dato che pirintf sfrutta al suo interno una write)
Please Help Me
mi stampa il risultato che speravo, ma con printf, mentre la traccia richiede che l'output debba essere stampato opportunamente
DALLA WRITE e non dal printf che ho utilizzato solo x verifiche. la write non dà nè cenni di errore ma tantomeno fornisce una visualizzazione è come se fosse nulla questa write, non esegue quanto chieso.
GRAZIEEEEEEEEEEEEEEEEE

3 Risposte

  • Re: [C] Pogramma a Livello Sistema UNIX - ESERCIZIO

    Attenzione!
    
    char buff[2];
    ...
    n1=read(STDIN_FILENO,buff,BUFSIZE);
    
    la printf esegue una conversione del tuo intero prima di eseguire la write.Devi convertire il tuo int con sprintf (per esempio) prima di stamparlo a video. La read funziona in modo analogo.

    esempio errato:
    
    l=read(STDIN_FILENO,&n,sizeof(int));
    n++;
    write (STDOUT_FILENO,&n,l);
    
    Se il mio input è 123 l'output presumo sarà 223

    esempio corretto:
    
    l=read(STDIN_FILENO,buff,BUFSIZE);
    sscanf (buff,"%d",&n);
    n++;
    l=sprintf (buff,"%d\n",n);
    write (STDOUT_FILENO,&buff,l);
    
  • Re: [C] Pogramma a Livello Sistema UNIX - ESERCIZIO

    GRAZIE. vedi il prof non ci ha mai fatto usare sscanf o fprintf, almeno non ancora e non so se è previsto in futuro nel programma didattico. non so se così me la darà x buona.
    Ha detto che potevamo fare tutto con write e read e la traccia richiede solo quelle 2.
    le funzioni che mi hai detto non le so usare.

    poi c'è un ulteriore cosa, io effettuo 2 read x l'input di 2 numeri + 1 sola write di stampa
    non faccio una lettura unica con con 1 read e 1 write

    please aiuto
  • Re: [C] Pogramma a Livello Sistema UNIX - ESERCIZIO

    La sscanf corrisponde ad atoi
    la funzione contraria potrebbe essere itoa ma non è standard. Se non puoi usare la sprintf creati una funzione che faccia la stessa cosa... modulo e divisione
Devi accedere o registrarti per scrivere nel forum
3 risposte