Сохранение владельца файла и прав после копирования файла в C - PullRequest
0 голосов
/ 30 марта 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

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

2 голосов
/ 30 марта 2011

поскольку вы используете 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's 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

0 голосов
/ 30 марта 2011

В Linux используйте libc fchmod и fchown Справочные страницы можно найти здесь:

http://linux.die.net/man/2/fchmod

http://linux.die.net/man/2/fchown

...