Supponendo che abbia realizzato un programma c di nome test.o se eseguo questo comando da shell:
- Codice: Seleziona tutto
echo ciao questo è un test | ./test.o
cosa devo scrivere nel programma per recuperare l'output di echo?
Grazie a tutti...
Moderatore: Staff
echo ciao questo è un test | ./test.o
main(int argc, char **argv)
ulisse89 ha scritto:Non ne sono sicuro, ma penso siano gli argomenti del main del programma test.
- Codice: Seleziona tutto
main(int argc, char **argv)
argc è il numero di stringhe passata e argv è vettore in cui ogni elemento punta ad ogni stringa.

#include <stdio.h>
main()
{
char* ciao[40];
scanf("%s", ciao);
printf("%s", ciao);
}echo "quellochevuoi" | test



blackman85 ha scritto:Ora però come faccio a sapere se c'è una pipe? Perché se leggo dallo stdin e non c'è una pipe si blocca il programma fino a che non si preme invio...

Ansa89 ha scritto:Dovresti controllare lo stato del buffer di stdin e, se è vuoto, far uscire il programma (o una qualunque altra azione scelta da te).
Mario Vanoni ha scritto:blackman85 ha scritto:Ora però come faccio a sapere se c'è una pipe? Perché se leggo dallo stdin e non c'è una pipe si blocca il programma fino a che non si preme invio...
Un programma C che legge stdin,
non puo` discernere da dove viene l'input,
vale per BSD/UNIX e vale per Linux.
Aggiungi una opzione -p (pipe) al tuo programma,
se lo chiami con l'opzione -p sei consapevole di quello che fai,
se lo chiami senza opzione esce, con o senza error message,
a tua discrezione.
ps -e | wc

blackman85 ha scritto:ottima idea però pensavo ai tool linux ad esempio se scrivo:
- Codice: Seleziona tutto
ps -e | wc
funziona correttamente senza alcun opzione -p

#include <stdio.h>
int main()
{
char buff[30];
fread(buff, 2, 2, stdin);
printf("%s", buff);
return 0;
}

Visitano il forum: Nessuno e 1 ospite