函数chown

函数chown一、chown命令下面以实例简单讲解下chown的使用方法。当前登录的账号是sunbin创建测试文件当前test.txt文件所有者是sunbin,所属组也是sunbin。利用chown命令修改test.txt的所有者和所属组.可以看到,test.txt的拥有者变成了root,所属组变为了root。 二、chown函数1.chown函数原…

一、chown 命令

下面以实例简单讲解下 chown 的使用方法。当前登录的账号是 sunbin

  • 创建测试文件

函数chown

当前 test.txt 文件所有者是sunbin,所属组也是sunbin。

  • 利用 chown 命令修改 test.txt 的所有者和所属组

函数chown

.可以看到,test.txt 的拥有者变成了 root,所属组变为了root。

 

二、chown函数

1. chown函数原型:

#include <unistd.h>
int chown(const char *pathname, uid_t owner, gid_t group);
                                       若成功,返回0;若出错,返回-1

参数:

  • pathname:要更改的文件名
  • owner:拥有者 uid
  • gropu:所属组 gid

 

需要注意的是,这个函数接受的是 uid 和 gid,而不是以字符串表示的用户名和用户组。所以需要另一个函数getpwnam根据字符串名称来获取 uid 和 gid. 它的原型如下:

 

1. 测试代码:

struct passwd 
{
    char   *pw_name;       // username
    char   *pw_passwd;     // user password
    uid_t   pw_uid;        // user ID
    gid_t   pw_gid;        // group ID
    char   *pw_gecos;      // user information
    char   *pw_dir;        // home directory
    char   *pw_shell;      // shell program
}

struct passwd *getpwnam(const char *name);

 

1. 测试代码:

#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) 
{
    uid_t uid;
    struct passwd *pwd;
    char *endptr;

    if (argc != 3 || argv[1][0] == '\0') {
        fprintf(stderr, "%s <owner> <file>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    uid = strtol(argv[1], &endptr, 10);  /* Allow a numeric string */

    if (*endptr != '\0') {         /* Was not pure numeric string */
        pwd = getpwnam(argv[1]);   /* Try getting UID for username */
        if (pwd == NULL) {
            perror("getpwnam");
            exit(EXIT_FAILURE);
        }
        uid = pwd->pw_uid;
    }

    if (chown(argv[2], uid, -1) == -1) {
        perror("chown");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}

输出结果:

函数chown


 

strtol用法:链接

#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);

测试代码:

#include <stdio.h> 
#include <stdlib.h>

int main()
{
    char buffer[20] = "10379cend$3";
    char *stop;
    printf("%d\n", strtol(buffer, &stop, 2));  //2
    printf("%s\n", stop);
    char a[] = "100";
    char b[] = "100";
    char c[] = "ffff";
    printf("a = %d\n", strtol(a, NULL, 10)); //100
    printf("b = %d\n", strtol(b, NULL, 2));    //4
    printf("c = %d\n", strtol(c, NULL, 16)); //65535
}

输出结果:

函数chown

 

参考资料

1. 17-chown 函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10474.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注