4.11. chown,
fchown, and lchown Functions
在做实验之前,因为操作vim和bash环境设置的问题搞了好长时间,总算勉勉强强顺手了。不过vim操作和bash脚本编程,.vimrc和.bashrc编写确实要抽时间来熟悉一下。
本例的初衷是为了理解上面那几个函数,不过我想功能应该是差不多的,于是就只选取了chown来做实验。
实验代码如下:
#include <stdio.h>
#include <unistd.h>
#include "apue.h"
#include "myerr.c"
#include <pwd.h>
#ifdef _POSIX_CHOWN_RESTRICTED
#undef _POSIX_CHOWN_RESTRICTED
#endif
#define _POSIX_CHOWN_RESTRICTED 0
int
main (int argc, char *argv[])
{
uid_t uid ;
struct passwd *pwdp ;
int i, j ;
char *endptr ;
char bSuccess ;
if (argc != 3)
err_quit ("usage : a.out <attribute> <filename> ...\n") ;
printf ("current user id :\t\t %d\n", getuid ()) ;
printf ("current group id :\t\t %d\n", getgid ()) ;
printf ("current effective user id :\t %d\n", geteuid ()) ;
printf ("current effective ground id :\t %d\n", getegid ()) ;
uid = strtol (argv[1], &endptr, 0) ;
if (*endptr != '\0') { // user name
if ((pwdp = getpwnam (argv[1])) == NULL)
err_msg ("getpwnam error : ") ;
} else {
if ((pwdp = getpwuid (uid)) == NULL)
err_msg ("getpwuid error : ") ;
}
puts ("\nuser/group info by getpwnam/getpwuid function:") ;
printf ("user : %s\n", pwdp->pw_name) ;
printf ("pwd : %s\n", pwdp->pw_passwd) ;
printf ("uid : %d\n", pwdp->pw_uid) ;
printf ("gid : %d\n", pwdp->pw_gid) ;
printf ("uifo : %s\n", pwdp->pw_gecos) ;
printf ("home : %s\n", pwdp->pw_dir) ;
printf ("shell: %s\n", pwdp->pw_shell) ;
printf ("-------\n") ;
printf ("_POSIX_CHOWN_RESTRICTED : %ld\n",
pathconf (argv[2], _PC_CHOWN_RESTRICTED)) ;
if (chown (argv[2], pwdp->pw_uid, -1) == -1)
err_ret ("chown for uid error ") ;
else
printf ("success to change uid") ;
putchar ('\n') ;
if (chown (argv[2], -1, pwdp->pw_gid) == -1)
err_ret ("chown for gid error ") ;
else
printf ("success to change gid") ;
putchar ('\n') ;
exit (0) ;
}
此代码类似于bash的chown命令。从控制台接收三个参数,第一个是程序名,第二个是新的用户名或群组名,第三个是文件名。
第一部分,先输出当前用户的信息(uid,gid,euid,egid);
第二部分,输出新的用户名或群组名的信息,与/etc/passwd保持一致;
第三部分,输出_POSIX_CHOWN_RESTRICTED的值,看系统是否对chown的功能进行了限制;
第四部分,输出是否能改变文件的uid和gid。
实验结果表明,Fedora中对chown的功能是有限制的_POSIX_CHOWN_RESTRICTED被定义为1.
对于非特权用户,只能改变自己文件的所属group,不能改变文件所属者,但可以将自己的文件改变为自己……(听起来很那个= =!)
分享到:
相关推荐
英文原版的第三版Unix 环境高级编程,圣经不多说,值得看原版。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
根据提供的文件信息,我们可以深入探讨其中的关键知识点,主要包括UNIX系统概述、UNIX标准化与实现以及文件I/O等内容。接下来,我们将对这些章节中的重要内容进行详细解析。 ### 一、UNIX System Overview(UNIX...
《基于Linux学习APUE》是针对那些热衷于在ARM平台上进行系统级编程的开发者们的...总之,《基于Linux学习APUE》是一次全面而深入的UNIX/Linux系统编程之旅,它将带你领略这个领域的精髓,助你在ARM开发道路上更进一步。
书本APUE后面的附录清单中的代码,用于使书本的例程中的err_sys等函数可以被使用。具体使用方法可以参见:blog.csdn.net/fanfank 中的《APUE代码注记》这篇博客,如果你还没见到这篇博客……证明我还没写好……
APUE学习笔记.xmind
4. **使用源码包**:下载并安装`apue`的源码包(如提供的`src.tar.gz`),该包通常包含所有必要的头文件和源代码。按照源码包的安装指南进行操作,通常包括解压、配置、编译和安装步骤。安装后,`apue.h`和其他相关...
使用CMake的APUE 该存储库包含《 Unix环境中的...cd apue-cmake mkdir build cd build cmake .. make 注意:在每一章的子目录中,您都可以看到README.md,其中列出了代码示例名称,以帮助您查找哪个代码是哪个示例。
Unix编程环境这本书是学习APUE(Advanced Programming in the Unix Environment)的基础读物,详细介绍了Unix操作系统的编程环境,涵盖了文件系统、Shell、过滤程序、进程通信、系统调用等关键知识,为读者提供了...
源代码对于学习APUE尤其有价值,因为通过阅读和分析代码,开发者可以直接看到理论在实际项目中的应用,从而加深对UNIX编程的理解。这可能是作者或社区提供的示例代码,用于演示书中介绍的各种技术。 总之,APUE2和...
APUE.2E是该书的第二版,提供了丰富的源代码实例,对于学习和理解UNIX系统编程的开发者来说,是一份极其宝贵的学习资料。 一、UNIX系统编程基础 UNIX系统编程涉及的核心概念包括进程管理、文件I/O、信号处理、网络...
APUE是学习UNIX系统编程的经典教材,它提供了一个名为libapue的库,包含了各种实用的系统调用和函数封装,方便开发者进行系统级别的编程。libapue.a是一个静态库文件,其中包含了许多预编译的函数,而apue.h则包含了...
《Advanced Programming in the UNIX® Environment, Third Edition》(中译《APUE:UNIX环境高级编程第三版》)是由史蒂文斯(W. Richard Stevens)原作、斯蒂芬·Rago(Stephen A. Rago)修订的书籍,它被广泛认为...
《APUE3-master》压缩包文件是针对操作系统学习的一个资源集合,主要涵盖了Unix系统的源代码分析。这个资源对于深入理解Unix系统的工作原理以及系统编程有着极高的价值。下面,我们将详细探讨这个压缩包中可能包含的...
Rago撰写,被广大程序员和系统管理员视为学习UNIX编程的重要参考书。源码分析可以帮助我们更直观地理解书中介绍的各种概念和技术,这对于提升在UNIX环境下的编程能力极其有价值。 在UNIX系统中,高级编程涉及到了...
它包含了对一些常见UNIX系统调用和库函数的简化和扩展,使得学习和使用更加方便。例如,`apue.h`可能包含了一些错误处理的宏定义,以及对I/O、进程控制、信号处理等方面的便利函数。 配置`apue.h`的过程主要涉及...
在学习和实践中,不仅要理解`apue.h`提供的功能,还要深入学习UNIX系统调用、进程管理、文件I/O、网络编程等内容。通过结合阅读《UNIX环境高级编程》和使用`apue.h`,你可以更好地掌握UNIX系统编程的精髓,这对于...
在学习APUE的过程中,理解和使用"apue.h"和"error.c"是至关重要的。它们帮助开发者建立一个标准的错误处理框架,使得代码更加整洁、易于维护。通过阅读和分析这两个文件,我们可以了解到如何在实践中构建类似的工具...
《通过实用案例讲解apue的使用》 APUE(Advanced Programing in the Unix Environment)是Leslie J. Ruyle在1992年出版的一本书,它是Unix环境下高级编程的经典教材,深受程序员喜爱。该书深入浅出地介绍了在Unix...