0

ここに私の問題があります: C では、ファイルのコピーを作成します (いくつかの変更を加えています)。ファイルのコピーは問題なく、出力ファイル自体は私が望むものです。

私の問題は次のとおりです。このプログラムをsudoとして頻繁に使用すると、結果のファイルには別の所有者(ルート)と異なる権限(実行権限がなくなった)の両方が含まれると思います。

私の質問は、元のファイルの所有者とアクセス許可をコピーして、新しいファイルに書き込むにはどうすればよいですか?

4

3 に答える 3

2

fstat (2) システム コールを使用して所有者と権限に関する詳細を取得し、fchmod (2) およびfchown (2) システム コールを使用してそれらを設定します。*BSD cp (1)ソース コードのsetfile関数の例を参照してください。

于 2011-03-30T13:19:27.193 に答える
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'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);

簡単なメモとして、f*char() の代わりに fread() と fwrite() を使用することをお勧めします。

于 2011-03-30T13:24:56.597 に答える
0

Linux では libc fchmod と fchown を使用します。マンページは次の場所にあります。

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

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

于 2011-03-30T13:18:29.407 に答える