Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Pogramma a Livello Sistema UNIX - ESERCIZIO

    ongiorno 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


    [code]
    #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

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    prova così: write(STDOUT_FILENO,somma,sizeof(somma) -1 );

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Due problemi fondamentali: innanzitutto come secondo parametro della write() va passato l'indirizzo di base della locazione di memoria da cui leggere i byte da scrivere, quindi va passato &somma e non somma. In secundis, anche dopo aver apportato questa correzione, con ogni probabilità la write() non stamperà comunque nulla di "leggibile" su console perché la funzione non fa altro che stampare byte grezzi, non è come la printf() che fa le sue conversioni in base alla stringa di formato. Se si vuole stampare il valore della somma con la write() bisognerà quindi prima riconvertirlo in stringa in un apposito buffer e passare quindi l'indirizzo di base di quest'ultimo alla write().
    Attenzione anche al più che evidente problema di buffer overflow: buff ha solo due elementi ma BUFSIZE è impostato a 4000. Andrebbe inoltre incluso l'header file stdlib.h per la funzione atoi().
    every day above ground is a good one

  4. #4
    ho surrogato i consigli di entrambi voi e ho apportato le dovute modifiche come da voi consigliato, e il risultato è che ho un eseguibile .out che è una bomba!!
    funziona benissimo raga, GRAZIE A TUTTI E 2.
    Ho ridefinito i size di buffer e buffering ed ho usato una spintf su somma caricandola in buff con la write e va ottimamente.
    come si fa per votarvi o darvi punteggio? non sono molto pratico di questo sito.
    Ad ogni modo grazie!! Ero bloccato sul capitolo del FILE I/O e non potete capire che liberazione poter passare al prossimo.
    GRAZIE MILLE!!

  5. #5

    GRAZIE FRATMO YU

    P.S. Ancora stonato dalla mattina non mi ero accorto che a risolvermi ancora il problema c'ha pensato YuYevon come sempre!!
    Fratellì sì semp n'amico, devi obbligatoriamente farti vedere a settembre appena iniziano i corsi, perchè mancho molto a Me, Andrea, Susy e tutti gli altri, e inltre perchè ti devo parlare di lavoro sempre se non sei molto impegnato questi giorni.
    M'ha fatto assai piacere Yu, sentiamoci su msn che quel cell tuo lo perdo di continuo assieme alla rubrica del cell intera. un abbraccio Fratellì sei il migliore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.