Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143

    [C] system call oppure librerie del linguaggio?

    Ciao, mi sto interessando ad imparare un po la programmazione su Linux, non sono pratico del C e leggendo un po di documentazione ho capito che ci sono due modi per accedere ai file:

    1)librerie del linguaggio
    2)system call

    A questo punto mi viene il dubbio: con che criterio scelgo una o l'altra strada? In definitiva che differenze ci sono tra i 2 modi?
    Io infatti vorrei fare per esempio un semplicissimo client-server ma non capisco con quale dei 2 modi.

    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    ... mi sembra che ci sia un po' troppa carne al fuoco...

    quali sono le system call e le librerie di cui parli?
    fscanf/fprintf varie e read/write?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143
    Ciao,
    dunque per esempio leggendo un po sulla guida del C si trovano funzioni come fopen() e fclose() per aprire e chiudere i file.
    Sulla programmazione di sistema in Unix trovo che ci sono le system call open() e close() .



  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    ok.

    le due soluzioni hanno, come di consueto, pregi e difetti. Provo ad elencarne alcuni.

    Le system call (open, close) non sono portabili su sistemi non Linux/Unix (anzi POSIX),
    perciò se vuoi portare il tuo programma in altri ambienti (windows) dovrai riscriverlo.

    Le funzioni di libreria fscanf e soci sono standars ANSI C quindi portabili su tutte le piattaforme.

    Avrai notato che i parametri che devi apssare alle funzioni sono diversi, nel primo caso si tratta di file descriptor, nel secondo di FILE*.

    In generale, se non hai esigenze specifiche le system call dovrebbero essere la scelta preferita.

    Dal post originale leggo che vuoi implementare un "semplice"? client-server... per cosa? Immagino che tu voglia utilizzare dei socket...

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143
    Ciao, adesso è tutto più chiaro
    Si, vorrei provare un semplicissimo client-server ma proprio di poche righe, magari solo per passarsi una stringa di verifica che funziona, niente di più. Vedo che hai fatto riferimento alle socket, anche se credo si possa fare con memoria condivisa se sono in locale (sbaglio?). L'una o l'altra scelta implementativa mi porta a preferire una delle 2 possibilità (system call e funzioni) ?
    Più che altro penso in prospettiva di un progettino, se mi venisse dato un client server un po più complesso, da quello che capisco dalla tua spiegazione, visto che mi viene presentato immagino come esercizio sulla programmazione di sistema, è il caso di farlo con le system call.
    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    Si esatto,
    se lo scopo è la programmazione di sistema su linux, assolutamente da usare le open, read, write... :-)

    Si, se è in locale allora puoi usare memoria condivisa, ma il focus sarebbe sull'IPC più che sul client-server...

  7. #7

    Salve a tutti

    Mi sono appena iscritto.
    Ho da poco iniziato all'università l'esame di LSO (laboratorio di sistemi operativi).
    Avrei alcuni dubbi vorrei che mi venissero chiariti se è possibile.
    Dunque stavo usando le system call principali ovvero open, write .......
    Queste devono restituire un File Descriptor. Ma se la funzione viene eseguita correttamente l'fd deve essere positivo no? Al contrario deve essere negativo. Giusto ho capito bene?

    Stavo facendo delle prove con la open.

    Qui la prima open mi da errore come volevo io, però per capire meglio ho fatto stampare i due file descritor.
    Ma se la seconda open funziona come mai mi da in output un valore negativo?

    codice:
    #include  <sys/types.h>
    
    #include  <sys/stat.h>
    
    #include   <fcntl.h>
    
    #include   <unistd.h>
    
    #include   <stdio.h>
    
    
    
    int main(void)
    
    {
    
     int fdin, fdin2;
    
     if ((fdin=open("open",O_RDONLY))<0)
        printf("\nE' avvenuto un errore:\n");
        printf("\n%d\n\n",&fdin);
     close(fdin);
     if ((fdin2=open("open2",O_RDWR | O_CREAT,0644))<0)
        printf("\nC'è stato un problema\n\n");
    
     printf("\n%d\n\n",&fdin2);
     close(fdin2);
    exit(0);
    }
    Grazie per la vostra attenzione.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    156
    a occhio sono sbagliate le printf. Perchè metti '&' se devi stampare un int?

  9. #9
    Ahhhhhhhhh hai ragione, non me ne ero proprio accorto. Così mi stampava il puntatore non il contenuto XD.
    Il mio uso di linguaggio c era ormai fossilizzato. Diciamo che parecchie cose le ho dimenticate. Ti ringrazio. Io uso linux da un pò di tempo oramai. Windows l'ho tolto proprio da mezzo, se mi serve per qualcosa uso la macchina virtuale . L'uso delle system call è interessante . Mi sto divertendo ora con la lseek. Grazie per l'illuminazione .
    Senti scusami ma non mi ricordo. Come funzionava per stampare i caratteri caratteri si usava lo scanf? Non mi ricordo la sintassi.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da Gacoment
    Ahhhhhhhhh hai ragione, non me ne ero proprio accorto. Così mi stampava il puntatore non il contenuto XD.
    Il mio uso di linguaggio c era ormai fossilizzato. Diciamo che parecchie cose le ho dimenticate. Ti ringrazio. Io uso linux da un pò di tempo oramai. Windows l'ho tolto proprio da mezzo, se mi serve per qualcosa uso la macchina virtuale .
    Ma l'errore sulla printf prescinde da Linux o Windows ...

    Senti scusami ma non mi ricordo. Come funzionava per stampare i caratteri caratteri si usava lo scanf? Non mi ricordo la sintassi.
    No ... la scanf e' per leggere dati da tastiera ...
    Per visualizzare caratteri si usa sempre la printf ...

    printf("%c", carattere);

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 © 2024 vBulletin Solutions, Inc. All rights reserved.