Не удается заставить работать функцию файлового дескриптора _write — Windows 10

Ниже приведены две версии простого кода, который я написал для Windows с помощью VS2017. Они выбираются директивой #if. Первая версия использует функции файлового дескриптора, чтобы открыть файл, а затем записать в него. Вторая версия делает то же самое, используя функции stdio. Обе версии успешно открывают файл, создавая его при необходимости, но успешно пишет только версия stdio. Версия файлового дескриптора дает сбой и приводит к сообщению об ошибке «C:/temp/fdio.txt: неверный файловый дескриптор». Я пробовал функции файлового дескриптора и флаги как с ведущими подчеркиваниями, так и без них, но результаты одинаковы. Пожалуйста, скажите мне, что мне не хватает.

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

int main(void)
{
   const char *fileName = "C:/temp/fdio.txt";
   char buf[] = "This is a test";

#if 1
   int fd = _open(fileName, _O_CREAT | _O_TRUNC | _O_TEXT, _S_IREAD | _S_IWRITE);
   if (fd == -1)
   {
      perror(fileName);
      exit(1);
   }

   int status = _write(fd, (void *)buf, (unsigned)sizeof(buf));
   if (status == -1)
   {
      perror(fileName);
      exit(1);
   }
#else
   FILE *fp = fopen(fileName, "w+");
   if (!fp)
   {
      perror(fileName);
      exit(1);
   }
   size_t status = fwrite(buf, 1, sizeof(buf), fp);
   if (status != sizeof(buf))
   {
      perror(fileName);
      exit(1);
   }
#endif
}

person BenevolentDeity    schedule 24.01.2019    source источник


Ответы (1)


_O_RDWR должен быть связан со вторым аргументом _open.

person BenevolentDeity    schedule 26.01.2019