Дескриптор файла stdout установлен неправильно
Я звоню в IBM API, QzshSystem. Его обязательным условием является обеспечение доступности файловых дескрипторов 0, 1 и 2. Мой код выглядит так,
int fd0 = -1, fd1 = -1, fd2 = -1;
if (fcntl(0, F_GETFL) == -1)
{
fd0 = open("/dev/null", O_RDONLY);
if (fd0 == -1)
{
fprintf(stderr, "Error %d opening file /dev/null\n", errno);
}
}
if (fcntl(1, F_GETFL) == -1)
{
fd1 = open("/apifile.out", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
if (fd1 == -1)
{
fprintf(stderr, "Error %d opening file %s\n", errno, "/apifile.out");
}
}
if (fcntl(2, F_GETFL) == -1)
{
fd2 = open("/apifile.err", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
if (fd2 == -1)
{
fprintf(stderr, "Error %d opening file %s\n", errno, "/apifile.err");
}
}
Затем следует вызов API после некоторого форматирования передаваемых аргументов,
aReturn = QzshSystem(CmdStrng);
API не работает (он должен запускать командную оболочку cmd) и возвращает ошибку 8; который из своей документации утверждает, что дескриптор файла stdout, 1, установлен неправильно.
Как это возможно? И я должен исправить дескриптор файла для stdout, используя close() и open?