函数chown

一、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;       // usernamechar   *pw_passwd;     // user passworduid_t   pw_uid;        // user IDgid_t   pw_gid;        // group IDchar   *pw_gecos;      // user informationchar   *pw_dir;        // home directorychar   *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));  //2printf("%s\n", stop);char a[] = "100";char b[] = "100";char c[] = "ffff";printf("a = %d\n", strtol(a, NULL, 10)); //100printf("b = %d\n", strtol(b, NULL, 2));    //4printf("c = %d\n", strtol(c, NULL, 16)); //65535
}

输出结果:

 

参考资料

1. 17-chown 函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不愧是Alibaba技术官,java数组实现单向链表

缓存雪崩 缓存雪崩指的是Redis当中的大量缓存在同一时间全部失效&#xff0c;而假如恰巧这一段时间同时又有大量请求被发起&#xff0c;那么就会造成请求直接访问到数据库&#xff0c;可能会把数据库冲垮。 缓存雪崩一般形容的是缓存中没有而数据库中有的数据&#xff0c;而因…

【线程】读写锁

一、概念 一把读写锁具备三种状态&#xff1a; 读模式下加锁状态(读锁&#xff09;写模式下加锁转态(写锁)不加锁状态2. 读写锁特性&#xff1a; 读写锁是写模式加锁时&#xff0c;解锁前&#xff0c;所有对该锁加锁的线程都会阻塞。读写锁是读模式加锁时&#xff0c;如果线程以…

不愧是阿里大佬,mysql存储过程写法案例

容器化时代来了 虚拟化技术已经走过了三个时代&#xff0c;没有容器化技术的演进就不会有 Docker 技术的诞生。 虚拟化技术演进 &#xff08;1&#xff09;物理机时代&#xff1a;多个应用程序可能会跑在一台机器上。 &#xff08;2&#xff09;虚拟机时代&#xff1a;一台物…

不看绝对血亏!java字符串转json

一、对Kafka的认识 1.Kafka的基本概念 2.安装与配置 3.生产与消费 4.服务端参数配置 二、生产者 1.客户端开发 必要的参数配置消息的发送序列化分区器生产者拦截器 2.原理分析 整体架构元数据的更新 3.重要的生产者参数 三、消费者 1.消费者与消费组 2.客户端开发 必要的…

【线程】屏障

一、主要函数应用 1. 函数原型&#xff1a;初始化和回收 int pthread_barrier_init(pthread *barrier, const pthread_barrier_t *attr, unsigned int count); int pthread_barrier_destroy(pthread_barrier_t *barrier);分析&#xff1a; 初始化屏障时&#xff0c;可以使用c…

中高级工程师Java开发!java生成随机数代码包

微服务是什么 微服务起源于2005年Peter Rodgers博士在云端运算博览会提出的微Web服务(Micro-Web-Service)&#xff0c;根本思想类似于Unix的管道设计理念。2014年&#xff0c;由Martin Fowler 与 James Lewis共同提出了微服务的概念&#xff0c;定义了微服务架构风格是一种通过…

Java软件开发面试题!hr和技术经理一起面

springspring5最全知识梳理大纲&#xff08;总&#xff09; spring最全知识梳理大纲&#xff08;总&#xff09; spring5最全知识梳理大纲&#xff08;总&#xff09; spring最全知识梳理大纲&#xff08;分&#xff09; 为什么要使用Spring&#xff1f; Bean spring事务 面向…

Java进阶之光!javaunicode码转字符

01 如何理解高并发&#xff1f; 高并发意味着大流量&#xff0c;需要运用技术手段抵抗流量的冲击&#xff0c;这些手段好比操作流量&#xff0c;能让流量更平稳地被系统所处理&#xff0c;带给用户更好的体验。 我们常见的高并发场景有&#xff1a;淘宝的双11、春运时的抢票、…

Java进阶之光!java字符串类型转换为int

阿里巴巴篇 1.扎实的计算机专业基础&#xff0c;包括算法和数据结构&#xff0c;操作系统&#xff0c;计算机网络&#xff0c;计算机体系结构&#xff0c;数据库等2.具有扎实的Java编程基础&#xff0c;理解IO、多线程等基础框架3.熟练使用Linux系统的常用命令及shell有一定了…

Java进阶之光!mysql创建用户并授权建表

正文 MyBatis 的整体架构分为三层&#xff0c; 分别是基础支持层、核心处理层和接口层&#xff0c;如下图所示。 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装&#xff0c;提供了更加简洁易用的 API &#xff0c;方便上层使调用&#xff0c;并且对反射操作…

Java进阶之光!mysql安装包安装教程

我听到的一些发声 你们赚的钱已经可以了&#xff1a; 我一个发小是做土木工程的&#xff0c;上海大学博士&#xff0c;参与很多著名建筑的工程&#xff0c;但是从薪资上看&#xff0c;还不如一些稍微像样的公司的6年多的高级开发。为什么&#xff1f;这就是行业的红利&#xf…

Java进阶学习资料!dockerjar内存

准备好套路 **①自我介绍&#xff1a;**千万不能筐瓢&#xff0c;一定要牢记&#xff0c;自然流畅地介绍自己的学习经历、工作经历、项目经历、个人优势等等&#xff1b; **②抽象概念&#xff1a;**当面试官问你是如何理解多线程的时候&#xff0c;你要知道从定义、来源、实…

管道(二)

无名管道 测试代码&#xff1a; #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <string.h>#define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); }while(0) #define TEST_SIZE 68*1024int mai…

Java进阶:java字符串定位语句

正文 模块&#xff08;Module&#xff09;、组件&#xff08;Component&#xff09;、包&#xff08;Package&#xff09;&#xff0c;这些概念对于我们技术同学并不陌生&#xff0c;但并不是所有人都能理解其要义。 深入理解之后&#xff0c;我才发现&#xff0c;其背后的深…

有名管道

一、有名管道 1. 为何提出有名管道的说法&#xff0c;目的是为了克服无名管道的不足之处&#xff1a; 无名管道只能是用于具有亲缘关系的进程之间&#xff0c;这就限制了无名管道的使用范围。有名管道可以使互不相关的两个进程互相通信&#xff0c;有名管道可以通过路径名来指…

Java进阶:mysql的事务隔离级别面试题

一面&#xff1a; 阿里巴巴面试答案文末可以领取&#xff01; 1. 触发新生代GC&#xff0c;如果存活对象总量大于survivor区容量&#xff0c;咋办 2. 如果任务很多&#xff0c;线程池的阻塞队列会撑爆内存的哪个区域 3. 栈在堆上吗 4. GC root有哪些 5. 实例变量可以是GC…

Java面试2021,java数据可视化项目

AOP简介 AOP (Aspect Oriented Programing) 称为&#xff1a;面向切面编程&#xff0c;它是一种编程思想。AOP 是 OOP&#xff08;面向对象编程 Object Oriented Programming)的思想延续 AOP采取横向抽取机制&#xff0c;取代了传统纵向继承体系重复性代码的编写方式&#xff0…

gcc的使用

一、gcc编译过程示意图 分析&#xff1a; hello程序是一个高级&#xff23;语言程序&#xff0c;这种形式容易被人读懂。为了在系统上运行hello.c程序&#xff0c;每条&#xff23;语句都必须转化为低级机器指令。然后将这些指令打包成可执行目标文件格式&#xff0c;并以二进…

Java面试2021,java黑马百度云

线程是否要锁住同步资源 锁住 悲观锁不锁住 乐观锁 锁住同步资源失败 线程是否要阻塞 阻塞不阻塞自旋锁&#xff0c;适应性自旋锁 多个线程竞争同步资源的流程细节有没有区别 不锁住资源&#xff0c;多个线程只有一个能修改资源成功&#xff0c;其它线程会重试无锁同一个线…

oppoJava面试题,java声明全局变量的关键字

蚂蚁一面 ⼀⾯就做了⼀道算法题&#xff0c;要求两⼩时内完成&#xff0c;给了⻓度为N的有重复元素的数组&#xff0c;要求输出第10⼤的数。典型的TopK问题&#xff0c;快排算法搞定。算法题要注意的是合法性校验、边界条件以及异常的处理。另外&#xff0c;如果要写测试⽤例&…