Я работаю над проектом для класса, и нам дали файл .c, содержащий следующий код:
int fd = -1;
if (fd < 0)
{
fd = open ("my_dev", O_RDWR);
if (fd < 0)
{
perror ("open");
return -1;
}
...
Итак, я понимаю, что он пытается открыть файл «my_dev» с разрешениями на чтение / запись, а затем возвращает дескриптор файла в случае успеха или отрицательное значение в случае неудачи, но я не понимаю, почему он дает мне «разрешение отклонено. " последовательно. Я пробовал использовать этот код:
int des = open("my_dev", O_CREAT | O_RDWR, 0777);
...
close(des)
чтобы открыть / создать файл (это вызывается перед другим блоком), но это не работает, и все же, если я просто использую это вместо этого:
FILE* file = fopen("my_dev","w+");
fprintf(file,str);
fclose(file);
Я могу писать в файл, то есть у меня есть права на запись. Обычно я бы просто использовал fopen и fprintf для всего, но для этого проекта мы вроде как должны использовать файл .c учителя, который будет пытаться использовать
open()
что приведет к ошибке «В разрешении отказано», что, в свою очередь, испортит мой код.
Думаю, мой вопрос в том, как fopen и open относятся друг к другу? Кажется, каждый может повторить, что open - это системный вызов, тогда как fopen - это стандартная функция библиотеки, но я не могу найти четкого ответа на вопрос, как я могу создать файл с помощью fopen (), который можно открыть с помощью open () без ошибка "доступ запрещен", или как я могу создать файл с помощью open (), в который я затем могу записать, закрыть и снова открыть с помощью open ().
Короче говоря, как мне создать файл на C, в который я могу писать и открывать позже с помощью open (O_RDWR)?
Извините, если это немного по кусочкам, я очень устал.
PS: Следует отметить, что я компилирую и запускаю на университетском компьютере, поэтому разрешения могут быть «странными», НО следует отметить, что если я создам файл с помощью команды терминала, то команда «dd» open () будет работать, и более того , У меня явно есть НЕКОТОРЫЕ права на запись, так как я действительно могу писать в файл с помощью fopen и fprintf