Я просто побежал в следующее поведение и хотели бы знать причины этого:IO на файловых дескрипторов
Предположим упрощенную программу, как этот
...
{
std::ifstream in(argv[1]);
assert(in.good());
while (std::getline(in, line)) {
// Area 1
}
in.close();
}
{
std::ifstream in(argv[1]);
assert(in.good());
while (std::getline(in, line)) {
// Area 2
}
in.close();
}
если такая программа вызова так:
./myProg xxx
и, Площадь 1 и Площадь 2 будут введены в п раз, где п число строк в ххх.
Однако я при вызове как то (с использованием Баш):
./myProg <(head -n 100 xxx)
Район 1 будет введен раз и Площадь 2 будет подставляться раз. Оба утверждения (in.good()) проходят. По-видимому, второй передает файловый дескриптор (что-то вроде/dev/fd/63, если я печатаю аргумент) вместо фактического файла, и эту вещь можно открыть для чтения один раз, но при открытии дважды он кажется пустым для второй звонок.
Интересно, в чем причина этого.