Newsgroup: it.comp.lang.c++
Titolo: Compilatori POSIX

Ciao,
c'è qualche vantaggio nell'usare compilatori POSIX?
Inoltre: <conio.h> non è POSIX-compliant.
Ma mi servirebbe comunque usare getch() e clrscr();
Mi e' venuto in mente di farlo con system("cls") e system("pause");
Sto usando cygwin su windows.
Il problema è che se inserisco system("cls") in un programma, in
compilazione tutto ok, ma in esecuzione ottengo:
sh: cls: command not found
come posso risolvere?
Grazie

 come posso risolvere?
Se proprio ci tieni, scrivi un programma chiamato CLS.EXE che fa quello 
che ti serve e mettilo nella stessa directory del tuo programma. Questo 
rimanda il problema a come implementare il programma CLS.EXE.
Alternativamente, richiama un altro comando, come "clear".
Altrimenti, usa la libreria portabile ncurses, o usa le funzioni API di 
Windows per l'I/O su terminale, o infine usa un altro compilatore.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 
"Solo" la portabilità o c'è qualche altro vantaggio?
Per cls ho cercato sul sito di cygwin e ho risolto così:
#define clrscr() printf("\e[2J")
Ora mi manca il getch()...

 #define clrscr() printf("\e[2J")
Ma questo non vale per tutti i compilatore mi sa vero?
Uso Dev-Cpp che si basa su gcc/g++ e invece che cancellare lo schermo mi 
stama una freccetta a sinistra seguita da [2j
Ciao 

 
Mi sa di no dunque... qualcun altro conferma per favore?

 Mi sa di no dunque... qualcun altro conferma per favore?
Quella che hai usato e' una sequenza di escape ANSI, di conseguenza 
funziona su qualunque terminale con una medio-bassa compatibilita' ANSI, 
il che significa qualunque terminale in ambiente linux/mac/unix e il 
cmd.exe di windows.
Probabilmente non funziona nel "viewer integrato" di ambienti di 
compilazione come devcpp o visualstudio, ma in quella finestra potresti 
fare comunque solo output quindi non dovrebbe fregartene + di tanto :)
Bye,
  Gabry

 "Solo" la portabilità o c'è qualche altro vantaggio?
Ti giro la domanda, che senso ha scrivere un programma che non è ne
posix ne niente per usare due stupidissime funzioni?
Non ti conviene prenderti un buon libro sulla programmazione in ambiente
*nix e seguire quello e basta?
Tra l'altro piano piano anche MS si sta orientando verso rendere Windows
un sistema POSIX compliant (il che vuol dire che installando le giuste
librerie Windows lo è, e sempre più versioni di Win vengono offerte con
tali librerie).
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 
che vuol dire molto brevemente "essere posix compliant" ?
Cos'è POSIX ?
Chiedo scusa per l'ignoranza
ciao
Soviet

 
Infatti ho risolto:
- getch() -> cout << "Premi invio per continuare"; cin >> tmpbuf;
- clrscr() -> printf("\e[2J")

 Cos'è POSIX ?
Da wikipedia italiana:
Gli standard POSIX derivano da un progetto, iniziato circa nel 1985,
finalizzato alla standardizzazione delle API per i software sviluppati
per le diverse varianti dei sistemi operativi UNIX.
...
Il compito dello standard Posix è quello di definire alcuni concetti
base che vanno seguiti durante la realizzazione del sistema operativo.
Confesso che rispetto alla pagina inglese non mi piace quella italiana.
Dice due cosette e basta. 
Ad ogni modo per dirla in due parole è uno standard per rendere
interoperabili tutti i sistemi UNIX e Unix. Tenendo conto che ormai
anche MS rilascia un layer di compatibilità POSIX, la cosa diventa
parecchio interessante, poichè significa che un programma che usa POSIX
può essere girato praticamente ovunque.


 può essere girato praticamente ovunque.
Si infatti !
Anzi, avevo già letto di hardware virtualizzato (che gira su 
emulatori di hardware astratto), ma onestamente senza un OS 
altrettanto virtualizzato, il normale programmatore a alto 
livello che non scrive debugger o compilatori, cosa se ne fa 
dell'hardware astratto senza un OS ?
non so se l'argomento si stia facendo OT, spero cmq in qualche 
ultima dritta
ciao
Soviet

raccordo di strutture dati magari diverse) ?
Se esiste un modo complicato di descrivere qualcosa, tu lo trovi
sempre :-)
POSIX è una collezione di interfacce, quindi un sistema operativo
POSIX-compliant implementa (totalmente o parzialmente) quelle
interfacce.
Con Windows questo significa che esistono dei pacchetti (SFU) di
utility che ricalcano le utility Unix. 
Guarda questo link: 
http://technet.microsoft.com/it-it/interopmigration/bb380242.aspx

 dell'hardware astratto senza un OS ?
Non c'entra nulla. Immagina questo: tu sai che se scrivi un programma C
che usa la libc standard lo giri ovunque hai un compilatore C. Tuttavia
sai anche che molte cose che vorresti fare non sono coperte (thread,
gestione processi, socket, ipc). 
POSIX ha API per tutto questo. Per cui se scrivi un programma che usa
tali chiamate (socket etc) lo puoi fare girare su qualunque sistema che
sia POSIX compatibile. Fra cui i vai *nix, Linux, MacOS X in testa, *e*
Windows, ammesso che sia stato corazzato con il sw di cui sopra.
Chiaramente si tratta di *ricompilarlo*, non siamo alla portabilità dei
binari. Ma puoi produrre un eseguibile funzionante su ciascuno dei
sistemi che ti interessano.


 
http://technet.microsoft.com/it-it/interopmigration/bb380242.aspx
ok, grazie
ciao
Soviet

proposito di queste interfacce
Un consiglio: cerca "POSIX" su Google ;-)