Do jeito que você escreveu, você precisa passar o conteúdo do arquivo para o seu programa, não o arquivo em si (e não há necessidade de xargs
, a propósito). Uma maneira de fazer isso é usar o redirecionamento de entrada :
a.out < file
Por exemplo:
$ cat file
4
7
$ ./a.out < file
A program which adds two integers
Enter 1st integer: Enter 2nd integer: Sum is 11
Outra maneira de fazer o mesmo é imprimir o conteúdo do arquivo e passar para o seu programa com um pipe:
$ cat file | ./a.out
A program which adds two integers
Enter 1st integer: Enter 2nd integer: Sum is 11
Uma abordagem muito mais clara, é claro, seria escrever seu programa para que ele possa receber argumentos em vez de ler entradas padrão:
./a.out 4 7
Ou, escreva-o para abrir arquivos internamente e analisá-los para os dados de entrada:
./a.out file
De qualquer forma, para obter apenas a última linha na saída, imprima o restante para o erro padrão:
#include <iostream>
int main() {
int x, y, sum;
std::cerr << "A program which adds two integers\n";
std::cerr << "Enter 1st integer: ";
std::cin >> x;
std::cerr << "Enter 2nd integer: ";
std::cin >> y;
std::cerr << "\n";
sum = x + y;
std::cout << "Sum is " << sum << std::endl;
return 0;
}
Agora, execute:
$ ./a.out < file > output.txt
A program which adds two integers
Enter 1st integer: Enter 2nd integer:
$ cat output.txt
Sum is 11
Ou para fornecer os valores manualmente:
$ ./a.out > output.txt
A program which adds two integers
Enter 1st integer: 4
Enter 2nd integer: 7
$ cat output.txt
Sum is 11