How to handle Unix pipe
How do I get the filename from redirection from the shell in my C++ code? i.e. ./MyProgram < myfile , I want to get myfile as the filename and its content line by line.
**Edit: I managed to get the input from file. Thanks for the help. However, after the looping through the file content, I want to keep user input with cin. It's like this:
while (true)
{
if (cin.eof() == false)
{
getline(cin, line);
c开发者_开发知识库out << line;
}else{
cin >> choice;
}
}
You can't (at least not portably). This information is not provided to the program. Instead, you can access the data from myfile
(in your example) by reading from standard input. E.g., you can use C++'s getline with cin
as the first parameter.
Depending on the shell, you may have inherited a descriptor representing an actual file or a pipe. If it's an actual pipe (i.e. fifo), the name won't mean much. But you can get the name on linux (and on Windows, but it doesn't sound like you're interested in that).
See Getting Filename from file descriptor in C
精彩评论