I want to change owner and group of a file in C. I google it, but if find only some code that use system()
and chmod
command or relative functions.
Is there a way to do this without system()
functions and Bash commands?
To complete the answer, on Linux the following can be used (I've tested on Ubuntu
):
#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
void do_chown (const char *file_path,
const char *user_name,
const char *group_name)
{
uid_t uid;
gid_t gid;
struct passwd *pwd;
struct group *grp;
pwd = getpwnam(user_name);
if (pwd == NULL) {
die("Failed to get uid");
}
uid = pwd->pw_uid;
grp = getgrnam(group_name);
if (grp == NULL) {
die("Failed to get gid");
}
gid = grp->gr_gid;
if (chown(file_path, uid, gid) == -1) {
die("chown fail");
}
}
You can use the chmod
, fchmodat
and/or fchmod
system calls. All three are located in <sys/stat.h>
.
For ownership, there's chown
and fchownat
, both in <unistd.h>
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With