I have two processes: t1.cpp
and t2.cpp
.
t1.cpp
and t2.cpp
are simplified ,I want to describe the problem easily.
//t1.cpp #include <iostream> using namespace std; int main() { cout << "hellon" << "worldn" << "ok okn"; return 0; } //t2.cpp #include <iostream> #include <limits> using namespace std; int main() { string str; while(getline(cin,str)){ cout << str <<endl; } //cin.clear(); //flush the cin //cin.ignore(std::numeric_limits<std::streamsize>::max(),'n'); char x; cin >> x; return 0; }
After compiling t1.cpp
and t2.cpp
. I execute them in this way ./t1 | ./t2
.
Problems occur! cin >> x;
in t2.cpp
failed! I have no chance to type from the keyboard.
It seems the pipe command implements by redirecting the STDIN_FILENO
. Does it forbid the standard input simultaneously?
My harsh requirements is obtain data from the output of t1
with shell command |
,in addition,I want interact with users in t2
.For example,I would display Sure to del?[y/n],and wait users's anwser.
Advertisement
Answer
Finally,we deal this problem using “/dev/tty”
FILE *file = fopen("/dev/tty","r"); if(NULL == file){ /*error*/ } int ch = fgetc(file); if('y' == ch || 'Y' == ch){ /*balabala*/ }
when stdin
or stdout
was redirected , we also can read or write from the /dev/tty
.