Pertanyaan Ubah pemilik dan kelompok di c


Saya ingin mengubah pemilik dan grup file di c. saya google itu, tetapi jika hanya menemukan beberapa kode yang menggunakan sistem () dan perintah chmod atau fungsi relatif. apakah ada cara untuk melakukan ini tanpa fungsi system () dan perintah bash?

Terima kasih semuanya. tapi masalah baru! : adakah cara untuk mendapatkan pengguna uid dan gid tanpa menggunakan perintah "id -u username" di c? parsing / etc / passwd? atau cara yang lebih baik?


7
2018-01-08 15:42


asal


Jawaban:


Anda dapat menggunakan chmod, fchmodat dan / atau fchmod panggilan sistem. Ketiganya berlokasi di <sys/stat.h>.

Untuk kepemilikan, ada chown dan fchownat, keduanya di <unistd.h>.


6
2018-01-08 15:44



Untuk melengkapi jawabannya, di Linux yang berikut ini dapat digunakan (saya sudah mengujinya Ubuntu):

#include <sys/types.h>
#include <pwd.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");
  }
}

5
2018-05-27 18:01



Ada sebuah chown berfungsi di sebagian besar pustaka C:

#include <sys/types.h>
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

1
2018-01-08 15:46



Mencoba man 2 chown dan man 2 chmod.

Lihat juga dokumentasi sini dan sini.


1
2018-01-08 15:45



chown() melakukan triknya.

man 2 chown

1
2018-01-08 15:46