2010-07-25 10 views
7

Sono un principiante C++.Dove posso imparare come far interagire un programma C++ con il sistema operativo (Linux)

Mi piacerebbe creare piccoli programmi che interagiscono con il sistema operativo (usando Kubuntu Linux). Finora, non sono stato in grado di individuare alcun tutorial o manuale per ottenere C++ per interfacciarsi con il sistema operativo.

In PHP, posso utilizzare il comando exec() o l'operatore backtick per avviare comandi tipicamente eseguiti in una console. Come posso fare cose simili in C++? Come posso ottenere il mio programma C++ per eseguire qualsiasi altro comando? Come posso ottenere l'output di tali comandi?

Grazie.

risposta

6

È possibile utilizzare il comando system() in stdlib per eseguire comandi di sistema:

#include <stdlib.h> 
int main() { 
    system("ls -l"); 
} 

system() restituisce un int come il suo valore di ritorno, ma il valore del int è dipendente dal sistema. Se provi a utilizzare un comando che non esiste, otterrai lo standard "nessun comando di questo tipo" restituito, e di solito un valore di ritorno diverso da zero. (Ad esempio, l'esecuzione di system("ls -l"); sul mio computer Windows XP restituisce il valore 1.

+0

Grazie per il codice di esempio e il puntatore alla libreria corretta. È stato molto utile +1 – augustin

+0

Avevo considerato di contrassegnare una delle risposte come quella "corretta". Ero a conoscenza del segno di spunta. Tuttavia, le tre risposte sono state utili e ciascuna ha aggiunto informazioni aggiuntive che gli altri due non avevano, quindi ero esitante su quale scegliere. Ma se aiuta il sistema, vado con la tua raccomandazione. È un peccato che io possa scegliere tutti e tre :) – augustin

+0

Grazie. Risposta perfetta per me – LinuxBill

7

È possibile utilizzare system() per eseguire comandi arbitrari ma, se si desidera controllare facilmente l'input e l'output con il programma, è necessario esaminare popen().

per ancora più di controllo, si può guardare a fare esattamente ciò che un guscio potrebbe fare, la creazione di alcuni descrittori di file in più, si biforcano per avviare un altro processo, la creazione di descrittori di file 0, 1 e 2 (ingresso, uscita e errore) in quel processo per collegarli ai descrittori dei file di processo originali, quindi eseguire il programma che si desidera controllare.Questo non è per i deboli di cuore :-)

+0

Grazie per aver menzionato il popen(). Ora che so cosa cercare, sono riuscito a trovare più risorse sul web (ad esempio http://www.gidforums.com/t-3369.html). Mi piacerebbe essere presto in grado di provare le cose che "non è per i deboli di cuore" :) +1 – augustin

2

È possibile utilizzare system() come indicato in precedenza oppure è possibile utilizzare librerie che forniscono accesso all'API POSIX standard. unistd.h e The GNU C Library includono molte funzioni per l'interazione del sistema operativo. Le possibilità con queste librerie sono infinite poiché puoi implementare le funzionalità da solo. Un semplice esempio: scansiona una directory per i file di testo con scandir() e stampa il contenuto dei file.

+0

Grazie per i riferimenti aggiuntivi ad altre librerie. Sto iniziando con qualcosa di molto semplice, e ho inserito tali segnalibri per quando ho bisogno di espandere ulteriormente quello che posso fare. +1 – augustin

Problemi correlati