Quando usare named pipe in Windows?
-
12-09-2019 - |
Domanda
In nix molte applicazioni a riga di comando * che accettano i nomi di file come argomenti accettano tubi anche. Esempio:
anApplication file.txt
Funziona anche con
anApplication | anotherApplication arguments
E il risultato del "anotherApplication" viene reindirizzato a "impostazione Applicazione" come fosse un file
Ho imparato che l'equivalente di Windows per questo è un "named pipe". Mi chiedo se l'applicazione a riga di comando deve essere consapevole di named pipe per capirlo, o se qualsiasi applicazione a riga di comando che accetta un file come argomento avrebbe lavorato con una named pipe, invece.
Soluzione
Hai presente abbastanza indietro. Giusto per essere precisi:
anApplication file.txt
Questo viene eseguito anApplication
con la file.txt
nome come primo argomento della riga di comando.
anApplication | anotherApplication arguments
Questo viene eseguito anApplication
senza argomenti della riga di comando. Out standard è collegata alla standard di anotherApplication
che è gestito con arguments
come argomenti della riga di comando. Questo è esattamente lo stesso su Windows come lo è sulle versioni di Unix. Named pipe sono una caratteristica del tutto diverso sistema operativo.
Una named pipe è una voce della rubrica che si presenta come un file, ma agisce come un flusso di dati che è possibile allegare output e input.
Altri suggerimenti
Un named pipe su Windows è una cosa molto diverso da quello che si sta parlando. Una named pipe è in realtà uno strumento per aiutare a costruire applicazioni server su Windows, ed è più o meno equivalente a una "presa di dominio Unix".
Nella tua situazione, se anApplication
lavora in questa situazione dipende da come l'applicazione reagisce quando viene eseguita senza un nome di file nella riga di comando. (Sto parlando della disposizione nella vostra descrizione, la linea di comando è indietro come sottolineato da un'altra risposta.) Se l'applicazione legge da stdin
quando avviato senza una riga di comando, allora questo tipo di accordo tubo shell funzionerà. Se invece, l'applicazione stampa un messaggio di aiuto ed esce quando lanciato senza un nome di file, quindi questo tubo shell non funzionerà.
Per quanto ne sappia funziona lo stesso sotto Windows come in UNIX. Suppongo che alcune funzioni API più avanzate console Win32 potrebbero aggirare questo, ma dovrete leggere la documentazione per questo.
Si noti che questa è la sintassi di cmd.exe.
Questo tipo di reindirizzamento pipe dovrebbe funzionare con qualsiasi programma, in modo per rispondere alla tua domanda specifica, il programma non ha bisogno di codice speciale se si tratta di un'applicazione console standard.
C'è un avvertimento -. Se il programma sta ottenendo in ingresso attraverso le speciali forme di monitoraggio della tastiera di API runtime, quindi il reindirizzamento non funziona