Дескриптор файла 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?

0 ответов

Другие вопросы по тегам