Следующий код, readTwice.c , читает со стандартного ввода дважды:
int main()
{
char s[8]={0};
read(0, (void *)s, (size_t) 3);
read(0, (void *)(s + 4), (size_t) 3);
for (int i = 0; i < 8; i++)
printf("%d: 0x%x\n", i, s[i]);
return 0;
}
Моя цель состоит в том, чтобы при отладке соответствующего двоичного файла передать первому read ()первый файл a (скажем, созданный echo a > a
) и второй файл read () со вторым файлом b (скажем, созданный echo b > b
).
За пределами GDB следующая команда bash 5.0 дает желаемый эффект:
$ ./readTwice < <(cat a;cat b)
0: 0x61
1: 0xa
2: 0x0
3: 0x0
4: 0x62
5: 0xa
6: 0x0
7: 0x0
Однако при запуске двоичного файла в GDB 8.2.1 с тем же перенаправлением процесса первый вызов read () также читаетначало второго файла:
$ gdb -q readTwice
Reading symbols from readTwice...(no debugging symbols found)...done.
(gdb) run < <(cat a;cat b)
Starting program: /home/av/root-me/ch77/readTwice < <(cat a;cat b)
0: 0x61
1: 0xa
2: 0x62
3: 0x0
4: 0xa
5: 0x0
6: 0x0
7: 0x0
[Inferior 1 (process 4710) exited normally]
(gdb)
Не могли бы вы помочь мне понять это поведение и / или рассказать мне о команде, имеющей желаемый эффект?