Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27
  1. #1

    Programmazione su Linux

    Ciao a tutti,

    sono una neoutonta linuxara da qualche mese. Ho iniziato con Debian, dalla quale sto scrivendo, e praticamente conosco solo questa. Mi sono messa in testa di imparare un po' di programmazione, ma per motivi economici non potevo permettermi tutta una serie di strumenti di sviluppo, cosi` eccomi qua.

    Voglio iniziare col C (Linux e` scritto con questo linguaggio, giusto?), i linguaggi orientati al web per ora non mi interessano. Sto iniziando a leggere "Programming in C" di Stephen Kochan, davvero un buon libro, ma dopo una rapida sfogliata non ho trovato risposte immediate alle classiche domandine da utonta.

    Io sono un'utonta che per iniziare a studiare qualcosa ha bisogno di certezze: ho dato un'occhiata ai sorgenti del kernel, e ho notato la presenza di diversi file con estensione .H

    Che differenza c'e` tra quelli con estensione .C? In piu`, all'interno ho visto dei nomi di funzioni (o perlomeno credo che si tratti di funzioni) che iniziano con due underscore, ad esempio __kernel_vsyscal. C'e` una particolare ragione per cui si chiamino cosi`?

    Per ora non mi viene in mente altro, ma sappiate che vi rompero` spesso le scatole con domande simili, spero di poter ricambiare prima o poi.

    Grazie in anticipo
    Tu schiavo di Hedwig. Ora tu fa quello che dice Hedwig.

    If you're going to San Francisco be sure to wear some flowers in your hair.

  2. #2
    I file con estensione .h sono i cosiddetti file header, il cui utilizzo, detto in termini sicuramente non esatti ma comprensibili, è quello di essere inclusi nel tuo sorgente C per darti la possibilità di accedere a librerie di funzioni già definite; in altri termini, se vuoi crearti una libreria di funzioni, devi creare sia un file .c in cui ci sono le funzioni vere e proprie, sia un file .h che altri o tu stessa potete includere nei vostri sorgenti per usare quelle funzioni (sicuramente questa risposta farà storcere il naso ai puristi, ma non credo sia poi così inesatta).

    Quanto alle funzioni i cui nomi iniziano con __ , se non ricordo male questo serve a marcare funzioni "di sistema" o anche funzioni che non sono fatte per essere richiamate da fuori del sorgente in cui sono definite.

    Tieni comunque presente che mettersi a spulciare i sorgenti di un oggetto complesso come il kernel di linux non è certo un modo per capire il C: sono troppo complessi, e ti conviene di certo seguire il percorso proposto dal tuo libro di testo.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Grazie della risposta. Avevo spulciato i sorgenti del kernel piu` per curiosita` che per altro, sicuramente e` roba al di fuori della mia portata.

    Nel primo programmino di esempio del libro trovo questo:

    #include <stdio.h>

    STandarD Input Output, a quanto ho capito. Visto che sono curiosa come una scimmia sono andata a cercare tale stdio.h e l'ho trovato in /usr/include insieme a un sacco di altri file simili. Queste sono le librerie? Mi chiedo come faro` a capire quali usare :master:

    Ho aperto il file in questione e mi sono spaventata per quanto sia complicato. Per ora prendero` atto del fatto che viene usato e non andro` oltre, ma presto o tardi dovro` capire cosa c'e` di preciso li` dentro.

    Ho letto in giro che il C e` portabile. Ma credo si riferisca al linguaggio in se` e non agli eseguibili generati, giusto? Vale a dire che posso scrivere un programma su Linux per poi compilarlo su altri sistemi senza fare modifiche varie, o no?
    Tu schiavo di Hedwig. Ora tu fa quello che dice Hedwig.

    If you're going to San Francisco be sure to wear some flowers in your hair.

  4. #4


    Non avere fretta...

    Intanto impara come usare le librerie standard, poi più avanti capirai come creare tu delle librerie, e a quel punto ti renderai conto che non è per nulla interessante andare a spulciare le librerie standard!!!

    Quanto alla portabilità del C, si, hai ragione, significa che è possibile ricompilare un sorgente su un altro sistema operativo o anche su un altro dispositivo (un palmare, o altro ancora); nota che ormai oggi il C non è più l'unico linguaggio ad avere questa caratteristica; ricorda anche che la portabilità è reale solo se usi solamente le cosiddette librerie ANSI; se ne usi altre, o se richiami direttamente funzioni del sistema oerativo, il codice non è più portabile, perlomeno non senza modifiche.

    Ciao, vado a nanna!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Buonanotte, grazie!
    Tu schiavo di Hedwig. Ora tu fa quello che dice Hedwig.

    If you're going to San Francisco be sure to wear some flowers in your hair.

  6. #6
    Originariamente inviato da Lyn
    [...]
    Nel primo programmino di esempio del libro trovo questo:

    #include <stdio.h>

    STandarD Input Output, a quanto ho capito. Visto che sono curiosa come una scimmia sono andata a cercare tale stdio.h e l'ho trovato in /usr/include insieme a un sacco di altri file simili. Queste sono le librerie? Mi chiedo come faro` a capire quali usare :master:
    No, in /usr/include ci sono solo header file, non librerie.
    Le librerie propriamente dette sono porzioni di codice gia` compilato e riusabile (si spera); certamente nulla vieta di avere codice da riusare in forma di sorgenti da includere al progetto, ma questo non cambia molto la definizione di librerie.
    Le librerie si trovano sotto /lib o /usr/lib, e sono tutti file precompilati. Binari, insomma.

    Per decidere quale usare basta capire... Quale soddisfa determinati requisiti
    Chiaramente il problema si sposta nel determinare i requisiti

    Ho aperto il file in questione e mi sono spaventata per quanto sia complicato. Per ora prendero` atto del fatto che viene usato e non andro` oltre, ma presto o tardi dovro` capire cosa c'e` di preciso li` dentro.
    Non e` necessario capirlo per programmare bene (almeno in un buon 90% dei casi), comunque la curiosita` e` sicuramente positiva

    Ho letto in giro che il C e` portabile. Ma credo si riferisca al linguaggio in se` e non agli eseguibili generati, giusto? Vale a dire che posso scrivere un programma su Linux per poi compilarlo su altri sistemi senza fare modifiche varie, o no?
    Esattamente. Questo a patto di scrivere codice che si attiene allo standard (o che usa librerie a sua volta portabili!)
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  7. #7
    Originariamente inviato da Ikitt
    No, in /usr/include ci sono solo header file, non librerie.
    Le librerie propriamente dette sono porzioni di codice gia` compilato e riusabile (si spera); certamente nulla vieta di avere codice da riusare in forma di sorgenti da includere al progetto, ma questo non cambia molto la definizione di librerie.
    Le librerie si trovano sotto /lib o /usr/lib, e sono tutti file precompilati. Binari, insomma.

    Per decidere quale usare basta capire... Quale soddisfa determinati requisiti
    Chiaramente il problema si sposta nel determinare i requisiti
    Ma quindi oltre a includere i sorgenti degli header e` anche possibile indicare l'inclusione delle librerie precompilate? O e` una cosa implicita, nel momento in cui si compila un programma su un sistema che le ospita?

    Non e` necessario capirlo per programmare bene (almeno in un buon 90% dei casi), comunque la curiosita` e` sicuramente positiva
    In effetti, metaforicamente parlando, per saper cucinare non e` necessario sapere come sono fatte le molecole della farina... eventualmente mi dedichero` piu` avanti all'analisi degli header.

    Esattamente. Questo a patto di scrivere codice che si attiene allo standard (o che usa librerie a sua volta portabili!)
    Ma a grandi linee cosa cambia tra ANSI C99 (il piu` recente, a quanto ho letto) e POSIX? Linux quale usa?

    Librerie grafiche ne esistono? Ad esempio una cosa del tipo window (0,0,100,100) che mi costruisca una finestra 100x100 a partire dalle coordinate 0,0? E se esistono, fan parte dei vari standard o sono totalmente separate da essi?
    Tu schiavo di Hedwig. Ora tu fa quello che dice Hedwig.

    If you're going to San Francisco be sure to wear some flowers in your hair.

  8. #8
    Vado con ordine:

    1)Quando includi un header dici al compilatore di occuparsi lui di capire dove come quendo includere le librerie che ci corrispondono, semplicemente tu ti garantisci di poter usare quelle funzioni nel tuo codice.

    2)Un po' più avanti magari imparerai a scrivere tu gli header file per le tue librerie che ti sarai creata...

    3)Sotto linux (ma potrei sbagliarmi) c'è chi usa Ansi e chi Posix, sono entrambi ben supportati, ma non sempre è così su altri sistemi operativi / dispositivi.

    4)Librerie grafiche ne esistono, anche multipiattaforma: un buon esempio sono le WxWindows (o WxWidgets, ha cambiato nome di recente e non mi ricordo più il nome esatto) ma all'interno di ANSI non c'è nulla che serva a gestire finestre.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  9. #9
    Originariamente inviato da Lyn
    Ma quindi oltre a includere i sorgenti degli header e` anche possibile indicare l'inclusione delle librerie precompilate? O e` una cosa implicita, nel momento in cui si compila un programma su un sistema che le ospita?
    L'inclusione di header file e il collegamento di librerie sono due azioni diverse che coinvolgono fasi diverse. Molto a grandi linee, l'inclusione degli header e' gestita (assieme ad altre direttive quali #define) dal preprocessore, che e' quel componente che agisce subito prima del compilatore vero e proprio; il preprocessore manipola i sorgenti espandendo le varie direttive, e il suo output e' ancora un sorgente C, in cui pero' i vari header file sono stati incorporati nel sorgente vero e proprio. Puoi fare qualche prova invocando 'cpp' o 'gcc -E' su qualche sorgente C.
    Il preprocessore da in pasto il suo lavoro al compilatore vero e proprio, che da un file sorgente C emette la traduzione in codice macchina, piu' eventuali ottimizzazioni; infine, e' il linker (ld) che mette insieme tutti i pezzi di codice oggetto, prodotti dal compilatore, per dar vita ad un eseguibile, una libreria o altro; e' appunto in questa fase che ha lugo l'inclusione (meglio: collegamento) delle varie librerie utilizzate.

    Ma a grandi linee cosa cambia tra ANSI C99 (il piu` recente, a quanto ho letto) e POSIX? Linux quale usa?
    Linux (il kernel) usa l'ISO C99 + estensioni di gcc; Linux (l'OS) supporta pero' sia ISO C che POSIX. POSIX, nella fattispecie, e' uno standard che specifica quali feature deve esporre un sistema di tipo unix a livello di funzioni di libreria o chiamate di sistema (e altro ancora). Lo si puo' vedere come un sovrainsieme dello standard C.

    Librerie grafiche ne esistono? Ad esempio una cosa del tipo window (0,0,100,100) che mi costruisca una finestra 100x100 a partire dalle coordinate 0,0? E se esistono, fan parte dei vari standard o sono totalmente separate da essi?
    A iosa ne esistono
    Non conosco pero' librerie grafiche regolamentate da standard (a livello di codice)
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  10. #10
    Grazie mille, gentilissimi

    E` tutto bello complicato ma mi affascina moltissimo. Vado a smanettare!
    Tu schiavo di Hedwig. Ora tu fa quello che dice Hedwig.

    If you're going to San Francisco be sure to wear some flowers in your hair.

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.