Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Linguaggio C++
Forum - C/C++ - Linguaggio C++

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 12:32
Giovedì, 21/08/2014
Salve a tutti, ho da poco completato di studiare un libro sul C++.
Il libro parla di tutto il linguaggio, delle variabili, array, istruzioni di controllo, funzioni, operazioni sui bit, classi, strutture, puntatori, eccezioni, template ecc ecc...
Ma se ad esempio io vorrei fare un programma che acquisisce uno screenshot dello schermo, oppure un programma che interagisce con i processi attivi oppure anche un semplice programma che mi consente di riavviare il computer, cosa devo fare?
Dopo quasi 600 pagine ancora nessun accenno su questo?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 14:00
Giovedì, 21/08/2014
Devi appoggiarti a librerie esterne o alle syscalls del kernel.
Con g++ puoi inserire del codice assembly nei tuoi sorgenti c++... Nei sistemi unix per esempio le syscalls sono accessibili impostando sul registro eax il numero corrispondente alla syscall e poi "int 80h".

PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 14:56
Giovedì, 21/08/2014
Tutte le cose che hai elencato cambiano in base al sistema operativo, a meno che non utilizzi una libreria cross-platform. Per esempio per gli screenshot su Linux dovresti interfacciarti a X, ma ciò funzionerebbe solo su Linux o qualunque altro OS con X (ma raramente le persone hanno Cygwin/X su Windows). Se invece non è un problema aggiungere librerie al tuo programma puoi usare SDL.

Testo quotato

Con g++ puoi inserire del codice assembly nei tuoi sorgenti c++... Nei sistemi unix per esempio le syscalls sono accessibili impostando sul registro eax il numero corrispondente alla syscall e poi "int 80h".


Non è necessario usare l'assembly, i sistemi operativi forniscono delle librerie per C/C++ che lo fanno al posto tuo. Si usava l'interrupt su Linux a 32 bit, su x86_64 si usa l'istruzione "syscall".

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:06
Giovedì, 21/08/2014
Ho elencato una possibilità... l' altra è usare libc e... appunto X ma era compresa nel "Devi appoggiarti a librerie esterne" quindi mi sarei dovuto ripetere

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 12:54
Venerdì, 22/08/2014
In che senso librerie esterne? E le chiamate di sistema?
Scusate l'ignoranza, ma lo chiedo perché nel libro che mi sono studiato non c'è nessun accenno su questo.
Magari conoscete qualche libro che in c++ spiega tutte le funzioni disponibili con qualche OS?
Anche avendo scaricato queste librerie, come faccio a studiarmele per poterle utilizzare?


Io uso Mac OS X e programmo con editor di testo e g++.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:13
Venerdì, 22/08/2014
Allora come già detto da zio le chiamate di sistema non si scrivono in assembly, ma sono i metodi come exit() printf() scanf() ecc. Questi metodi sono fisicamente nella libreria libc che gcc linka automaticamente ad ogni compilazione.
Quelle che io chiamo "librerie esterne" sono librerie che non hai scritto tu.
Un esempio pratico è sqlite. Sqlite non lo hai scritto tu, ma viene distribuito come libreria così da permettere ai tuoi programmi di utilizare sqlite.
Tieni conto che su mac esiste il cocoa framework che puoi sfruttare in objective-c quindi se vuoi hai la possibilità di usare il framework cocoa "mischiando" i due sorgenti...

La documentazione sul cocoa framework è disponibile al sito degli sviluppatori apple.
Mentre la documentazione per altre librerie viene rilasciata da chi ha scritto le librerie (infatti se vai sul sito di sqlite troverai descritte le api di sqlite)

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 13:33
Venerdì, 22/08/2014
Testo quotato

Non è necessario usare l'assembly, i sistemi operativi forniscono delle librerie per C/C++ che lo fanno al posto tuo. Si usava l'interrupt su Linux a 32 bit, su x86_64 si usa l'istruzione "syscall".




Come si chiamano queste librerie in C/C++ che i sistemi operativi mettono a disposizione?
Dove potrei studiarmele?
Mi interessavano quelle per Mac OS X e per Windows.

Che differenza c'è tra usare delle librerie con usare le chiamate di sistema?


PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 13:37
Venerdì, 22/08/2014
Testo quotato

Postato originariamente da MirkoDistefano:
Magari conoscete qualche libro che in c++ spiega tutte le funzioni disponibili con qualche OS?


Un mattone piuttosto inutile, è evidente che ti manca esperienza di programmazione, vediamo di darti delle nozioni base che ti aiutino.
In partenza abbiamo l'hardware che di base ha già delle "funzioni" definite mediante l'elettronica queste sono le funzioni base che troviamo in assembly, un linguaggio ostico e complicato che ci permette di interagire con queste "funzioni" mediante delle parole chiave a differenza del linguaggio macchina che le medesime funzioni le vede come "parole" di 0 e 1.
Il C++ come il C e tutti gli altri linguaggi di programmazione compilati, sono una uno step in più al di sopra dell' Assembly che ti permette di scrivere il tuo programma con un linguaggio più semplice ed umano, detto questo i passaggi non cambiano: C++ -> Assembly -> linguaggio macchina
Per questo ogni funzione che puoi far eseguire alla macchina in Assembly la puoi far eseguire in C++. Le librerie sono parti di codice già fatte da altre persone, sono funzioni già pronte che puoi riprodurre in tutto e per tutto in C++.
Questo per farti capire che le funzioni che tanto tu ricerchi le puoi scrivere tu. La parte complicata è trovare come puoi scriverle, per questo devi studiare il comportamento della macchina. Oppure usare delle librerie dove questo lavoro è stato fatto da altri.

Spero che questo sproloquio ti sia servito, buon divertimento.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:43
Venerdì, 22/08/2014
Aggiungerei che: nei moderni computer l' hardware non è direttamente utilizzabile dalla tua applicazione: infatti l' unica applicaione che può stampare a video, leggere file su disco, scrivere ecc.... è il kernel del tuo sistema operativo. Per questa ragione esistono le syscalls: generando una syscall fai una richiesta al kernel per fargli fare qualcosa che altrimenti non puoi fare perchè il kernel te lo impedirebbe

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo