Ниже приведены две версии некоторого простого кода, который я написал для Windows с использованием VS2017.Они выбираются директивой #if.Первая версия использует функции дескриптора файла, чтобы открыть файл, а затем записать в него.Вторая версия делает то же самое, используя функции stdio.Обе версии успешно открывают файл, создавая его при необходимости, но успешно записывает только версию stdio.Сбой версии дескриптора файла и приводит к появлению сообщения об ошибке «C: /temp/fdio.txt: Bad descriptor file».Я пробовал функции файлового дескриптора и флаги как с начальными чертами, так и без них, но результаты одинаковы.Пожалуйста, скажите мне, что мне не хватает.
#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
}