Input al programma senza argomenti della riga di comando

0

Supponiamo che non ci siano argomenti da riga di comando. Come passi i dati di input a un programma?

Sto pensando di scrivere l'input su un file con un nome specifico, in modo tale che il programma sappia aprirlo e leggerlo come input. Tuttavia, come si potrebbe scoprire il nome di quel file? Di solito, l'esecuzione di un programma da riga di comando senza argomenti o con un argomento di guida standard (ad esempio \? ) produce alcune istruzioni su come usarlo. Ma dato un ambiente senza argomenti da riga di comando, come si fa a scoprire come far funzionare un programma?

    
posta Core Xii 19.03.2012 - 14:16
fonte

8 risposte

2

Puoi usare gli strumenti per visualizzare tutte le stringhe codificate all'interno dell'applicazione, e speriamo che il nome del file venga visualizzato.

Controlla OllyDBG su Windows e stringhe su Linux (è un'applicazione della riga di cmd).

Una soluzione più complessa: attiva il tuo debugger asm (OllyDBG, GDB) preferito e sporcati le mani.

    
risposta data 19.03.2012 - 14:21
fonte
1

Nel mondo .NET, questo si ottiene con l'uso di un file app.config incluso con il tuo codice sorgente. Questo viene copiato nella cartella di output con un nome che segue la convenzione "MyApp.exe.config" in cui l'applicazione è "MyApp.exe".

Non so se esistono convenzioni simili per altre lingue.

    
risposta data 19.03.2012 - 14:28
fonte
1

Sembra che la convenzione popolare sia per i programmi che usano stream standard per cose come che:

In computer programming, standard streams are preconnected input and output channels between a computer program and its environment (typically a text terminal) when it begins execution...

Puoi vedere come funziona usando qualsiasi interprete di comandi disponibile nel tuo sistema operativo. In Windows, puoi lanciare la shell DOS e digitare help . In Unix lanci shell e scrivi man .

    
risposta data 19.03.2012 - 14:45
fonte
1

Si potrebbe guardare COM, come implementato da Microsoft. In quel sistema, il sistema operativo carica la tua DLL in memoria quando qualcuno ha bisogno di un oggetto del tuo tipo. Se qualcuno ha bisogno di passare informazioni a quell'oggetto, può utilizzare il metodo standard IUnknown::QueryInterface(GUID) per ottenere un'interfaccia ben nota e quindi passare le informazioni tramite tale interfaccia.

Naturalmente, se il tuo oggetto non ha una tale interfaccia, restituirà E_NO_INTERFACE . Ma non è diverso (solo più facile eseguire il debug) di un programma CLI che ignora i suoi argomenti.

    
risposta data 19.03.2012 - 16:05
fonte
1

Molti sistemi operativi hanno già il concetto di "variabili ambientali". Questo è un insieme di valori nominati che vengono passati a ogni processo, oltre agli argomenti della riga di comando. Usando C, devi accedervi con getenv() .

Simile alla convenzione /? per le righe di comando, il writer del sistema operativo può definire una convenzione secondo cui la presenza di una variabile HELP nell'ambiente significa che un programma dovrebbe mostrare le informazioni di utilizzo. Nel codice C: if (getenv("HELP")) { ShowHelp(); }

    
risposta data 19.03.2012 - 16:11
fonte
1

Non capisco cosa realmente stia facendo l'OP, ma è abbastanza comune per i programmi della riga di comando utilizzare le variabili ambientali come input al posto dei parametri della riga di comando.

Ovviamente ciò pone la domanda su da dove vengono le variabili ambientali.

    
risposta data 19.03.2012 - 16:16
fonte
0

Puoi creare il file .bat con i tuoi argomenti in esso.

    
risposta data 19.03.2012 - 18:47
fonte
-1

Vado per una risposta diretta.

Leggi il manuale dell'utente. Quindi si utilizza una sorta di dispositivo di input come una tastiera o un mouse per controllare il programma. Se il programma richiede una grande quantità di dati, è possibile indirizzarlo a un file. Dirigere un programma in un file è molto vario nel corso dei secoli, ma è stato standardizzato alle tipiche finestre popup del SO.

Se si tratta di un programma a riga di comando, senza argomenti della riga di comando, allora si dipenderà dall'interfaccia del programma. A un certo punto probabilmente dovrai digitare il percorso del nome del file.

    
risposta data 19.03.2012 - 16:58
fonte

Leggi altre domande sui tag