Установка прав доступа к файлу в C только для чтения

Я новичок в программировании на C и пытаюсь поэкспериментировать с установкой прав доступа к файлу только для чтения. Я уверен, что у меня неправильные директивы, и когда я пытаюсь скомпилировать, я получаю сообщение об ошибке в строке, что #include ‹io.h› имеет фатальную ошибку: io.h нет такого файла или каталога. Файл «time.log» находится в каталоге «time_logs», и программа будет запускаться из того же каталога, что и каталог «time_logs».

ОС Rasbian для Raspberry Pi 4 Arm с использованием GCC

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <io.h>
#include <sys.h>


struct stat st = {0};

int main(void){


      if(_chmod("time_logs/time.log", _S_IREAD) == -1)
         perror("Not found");

        else{
              _chmod("time_logs/time.log", _S_IREAD);

             }
}





person YHapticY    schedule 30.11.2020    source источник
comment
формулировка вашего вопроса и описание не совпадают   -  person csavvy    schedule 30.11.2020
comment
Я предполагаю, что вы кодируете в Windows? Если да, предложите добавить это в описание и теги. Также было бы полезно указать, как вы компилируете.   -  person kaylum    schedule 30.11.2020
comment
Какую ОС вы используете? И почему вы вызываете эту функцию _chmod() дважды с одними и теми же аргументами?   -  person Shawn    schedule 30.11.2020
comment
Я кодирую на архитектуре Raspberry Pi 4 Arm. используя Arm gcc. Я, вероятно, выбрал неправильные директивы, когда проводил исследование, но я кодирую в Raspberry Pi 4 Raspbian Arm. Я не совсем знаком с тем, как работает _chmod. Я использовал его с командами Linux и провел некоторое исследование того, как изменить права доступа с помощью C для файлов, и _chmod использовался несколько раз. это было мое лучшее предположение, которое я мог придумать для управления правами доступа к файлу.   -  person YHapticY    schedule 30.11.2020
comment
Вы, должно быть, читаете документацию Microsoft. Этот код недействителен для Linux. Предложите вам более конкретно искать разрешение на изменение файла linux C   -  person kaylum    schedule 30.11.2020


Ответы (1)


Похоже, вы использовали руководство по Windows, пытаясь написать код для Linux.

#include <unistd.h>
#include <sys/stat.h>

      if(chmod("time_logs/time.log", S_IRUSR | S_IRGRP | S_IROTH) == -1)
         perror("time_logs/time.log");

Но большинство людей просто вводят биты разрешения напрямую. Это будет 0444. Отрегулируйте по вкусу.

person Joshua    schedule 30.11.2020
comment
да, похоже, я отклонялся от некоторых инструкций Windows. Хотя я работаю с линуксом. Так что я обязательно поищу Linux C в будущем. - person YHapticY; 30.11.2020
comment
@YHapticY: подсказка: найдите linux man 2 xyz или linux man 3 xyz. - person Joshua; 30.11.2020
comment
большое спасибо за подсказку @Joshua. Я думаю, что у меня это работает сейчас. - person YHapticY; 30.11.2020