Oppure

Loading
21/08/14 10:32
MirkoDistefano
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?
aaa
21/08/14 12:00
TheDarkJuster
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".
aaa
21/08/14 12:56
ZioCrocifisso
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.

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".
aaa
21/08/14 13:06
TheDarkJuster
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
aaa
22/08/14 10:54
MirkoDistefano
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++.
aaa
22/08/14 11:13
TheDarkJuster
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)
aaa
22/08/14 11:33
MirkoDistefano
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?

aaa
22/08/14 11:37
Roby94
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.
aaa