一、chown 命令
下面以实例简单讲解下 chown 的使用方法。当前登录的账号是 sunbin
- 创建测试文件
当前 test.txt 文件所有者是sunbin,所属组也是sunbin。
- 利用 chown 命令修改 test.txt 的所有者和所属组
.可以看到,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);
}
输出结果:
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
}
输出结果:
参考资料
1. 17-chown 函数
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/10474.html