Сохранение файлов и разрешений после копирования файла в C

вот моя проблема: в C я создаю копию файла (с некоторыми изменениями). Это делается тривиально через fopen(), getchar и putchar. Копирование файла в порядке, и сам файл вывода - это то, что я хочу.

Моя проблема: я предполагаю, что буду использовать эту программу часто как sudo, а затем в результирующем файле есть как другой владелец (root), так и разные разрешения (права выполнения удалены).

Мой вопрос: как я могу скопировать владельца и разрешения исходного файла, а затем записать их в новый?

Ответ 1

Используйте системный вызов fstat (2), чтобы получить сведения о владельце и разрешениях, а также системные вызовы fchmod (2) и fchown (2) для их установки. См. Пример в функции setfile исходного * BSD cp (1) .

Ответ 2

поскольку вы используете fopen():

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

//fp is your source filepointer, fdest is your dest filepointer
//fn is the  new filename you're copying to

struct stat fst;
//let say this wont fail since you already worked OK on that fp
fstat(fileno(fp),&fst);
//update to the same uid/gid
fchown(fileno(fdest),fst.st_uid,fst.st_gid);
//update the permissions 
fchmod(fileno(fdest),fst.st_mode);

в качестве быстрой заметки вы можете захотеть fread() и fwrite() вместо f * char() 'ing