Системный вызов fchown()#

Описание#

Системный вызов fchown() - эквивалент системного вызова chown(), используется для изменения владельца и группы файла.

fchown() изменяет владельца файла, на который ссылается дескриптор открытого файла, в отличие от chown() - изменяет владельца файла, указанного в path.

Синтаксис системного вызова:

#include <unistd.h>

int fchown(int fildes, uid_t owner, gid_t group);

Где:

  • #include <unistd.h> - включение заголовочного файла, содержащего определения используемых функций и констант;

  • int - целочисленный тип данных;

  • fildes - файловый дескриптор;

  • uid_t owner - новый владелец файла;

  • gid_t group - новая группа файла.

Пример использования#

Для изменения владельца файлов на текущего пользователя/группу используйте:

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

int main(int argc, char **argv)
{
    int i;
    int ecode = 0;
    int fd;

    for(i = 1; i < argc; i++)
    {
        if((fd = open(argv[i], O_RDONLY)) == -1)
        {
            perror(argv[i]);
            ecode++;
        } else
            if(fchown(fd, getuid(), getgid()) == -1)
            {
                perror(argv[i]);
                ecode++;
            }

      close(fd);
    }

    return (ecode);
}

Где:

  • #include <stdio.h> - включение заголовочного файла, содержащего определения функций ввода-вывода;

  • #include <fcntl.h> - включение заголовочного файла, содержащего определения функций работы с файлами;

  • #include <sys/types.h> - включение заголовочного файла, содержащего определения типов данных, используемых в системных вызовах;

  • int main( int argc, char **argv ) - объявление функции main - точки входа в программу, argc - количества переданных в программу аргументов, argv - массива указателей на строки, содержащие эти аргументы;

  • int i... fd; - объявление используемых переменных; i - счетчик в цикле for, ecode - отслеживание количества ошибок, fd - файловый дескриптор;

  • for ( i = 1; i < argc; i++ ) - начало цикла for, который будет проходить по всем аргументам, переданным в программу, начиная с первого;

  • if ( ( fd = ... else - проверка возможности открытия файла; если файл не может быть открыт, то будет выведено сообщение об ошибке и увеличен счетчик ошибок;

  • if ( fchown( fd, ... ecode++; - изменение владельца и группы файла, используя файловый дескриптор; в случае ошибки будет выведено соответствующее сообщение и увеличен счетчик ошибок;

  • close( fd ); - закрытие файлового дескриптора после выполнения необходимых операций;

  • return (ecode); - вывод количества произошедших ошибок.

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

man fchown