Ответ 1
Используйте системный вызов fstat (2), чтобы получить сведения о владельце и разрешениях, а также системные вызовы fchmod (2) и fchown (2) для их установки. См. Пример в функции setfile исходного * BSD cp (1) .
вот моя проблема: в C я создаю копию файла (с некоторыми изменениями). Это делается тривиально через fopen(), getchar и putchar. Копирование файла в порядке, и сам файл вывода - это то, что я хочу.
Моя проблема: я предполагаю, что буду использовать эту программу часто как sudo, а затем в результирующем файле есть как другой владелец (root), так и разные разрешения (права выполнения удалены).
Мой вопрос: как я могу скопировать владельца и разрешения исходного файла, а затем записать их в новый?
Используйте системный вызов fstat (2), чтобы получить сведения о владельце и разрешениях, а также системные вызовы fchmod (2) и fchown (2) для их установки. См. Пример в функции setfile исходного * BSD cp (1) .
поскольку вы используете 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
В Linux используйте libc fchmod и fchown Манистры можно найти здесь: