ここに私の問題があります: C では、ファイルのコピーを作成します (いくつかの変更を加えています)。ファイルのコピーは問題なく、出力ファイル自体は私が望むものです。
私の問題は次のとおりです。このプログラムをsudoとして頻繁に使用すると、結果のファイルには別の所有者(ルート)と異なる権限(実行権限がなくなった)の両方が含まれると思います。
私の質問は、元のファイルの所有者とアクセス許可をコピーして、新しいファイルに書き込むにはどうすればよいですか?
ここに私の問題があります: C では、ファイルのコピーを作成します (いくつかの変更を加えています)。ファイルのコピーは問題なく、出力ファイル自体は私が望むものです。
私の問題は次のとおりです。このプログラムをsudoとして頻繁に使用すると、結果のファイルには別の所有者(ルート)と異なる権限(実行権限がなくなった)の両方が含まれると思います。
私の質問は、元のファイルの所有者とアクセス許可をコピーして、新しいファイルに書き込むにはどうすればよいですか?
fstat (2) システム コールを使用して所有者と権限に関する詳細を取得し、fchmod (2) およびfchown (2) システム コールを使用してそれらを設定します。*BSD cp (1)ソース コードのsetfile関数の例を参照してください。
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() を使用することをお勧めします。
Linux では libc fchmod と fchown を使用します。マンページは次の場所にあります。