`

apue 学习之 Chapter 4 - chown

阅读更多

 

4.11. chown, fchown, and lchown Functions

在做实验之前,因为操作vimbash环境设置的问题搞了好长时间,总算勉勉强强顺手了。不过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) ;
}
 

 

此代码类似于bashchown命令。从控制台接收三个参数,第一个是程序名,第二个是新的用户名或群组名,第三个是文件名。

第一部分,先输出当前用户的信息(uidgideuidegid);

第二部分,输出新的用户名或群组名的信息,与/etc/passwd保持一致;

第三部分,输出_POSIX_CHOWN_RESTRICTED的值,看系统是否对chown的功能进行了限制;

第四部分,输出是否能改变文件的uidgid

 

实验结果表明,Fedora中对chown的功能是有限制的_POSIX_CHOWN_RESTRICTED被定义为1.

对于非特权用户,只能改变自己文件的所属group,不能改变文件所属者,但可以将自己的文件改变为自己……(听起来很那个= =!)

0
1
分享到:
评论

相关推荐

    APUE-3rd-edition-english

    英文原版的第三版Unix 环境高级编程,圣经不多说,值得看原版。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    APUE-Edition2-英文版

    根据提供的文件信息,我们可以深入探讨其中的关键知识点,主要包括UNIX系统概述、UNIX标准化与实现以及文件I/O等内容。接下来,我们将对这些章节中的重要内容进行详细解析。 ### 一、UNIX System Overview(UNIX...

    基于linux学习apue

    《基于Linux学习APUE》是针对那些热衷于在ARM平台上进行系统级编程的开发者们的...总之,《基于Linux学习APUE》是一次全面而深入的UNIX/Linux系统编程之旅,它将带你领略这个领域的精髓,助你在ARM开发道路上更进一步。

    APUE程序清单B-2 输出至标准出错文件的出错处理函数

    书本APUE后面的附录清单中的代码,用于使书本的例程中的err_sys等函数可以被使用。具体使用方法可以参见:blog.csdn.net/fanfank 中的《APUE代码注记》这篇博客,如果你还没见到这篇博客……证明我还没写好……

    APUE学习笔记.xmind

    APUE学习笔记.xmind

    unix高级编程---apue.h 错误解决

    4. **使用源码包**:下载并安装`apue`的源码包(如提供的`src.tar.gz`),该包通常包含所有必要的头文件和源代码。按照源码包的安装指南进行操作,通常包括解压、配置、编译和安装步骤。安装后,`apue.h`和其他相关...

    apue-cmake:支持cmake的APUE示例

    使用CMake的APUE 该存储库包含《 Unix环境中的...cd apue-cmake mkdir build cd build cmake .. make 注意:在每一章的子目录中,您都可以看到README.md,其中列出了代码示例名称,以帮助您查找哪个代码是哪个示例。

    unix编程环境(学习apue的基础)

    Unix编程环境这本书是学习APUE(Advanced Programming in the Unix Environment)的基础读物,详细介绍了Unix操作系统的编程环境,涵盖了文件系统、Shell、过滤程序、进程通信、系统调用等关键知识,为读者提供了...

    APUE3+代码+APUE2(中文)

    源代码对于学习APUE尤其有价值,因为通过阅读和分析代码,开发者可以直接看到理论在实际项目中的应用,从而加深对UNIX编程的理解。这可能是作者或社区提供的示例代码,用于演示书中介绍的各种技术。 总之,APUE2和...

    apue.2e(apue源代码)

    APUE.2E是该书的第二版,提供了丰富的源代码实例,对于学习和理解UNIX系统编程的开发者来说,是一份极其宝贵的学习资料。 一、UNIX系统编程基础 UNIX系统编程涉及的核心概念包括进程管理、文件I/O、信号处理、网络...

    只使用APUE的libapue.a库文件和apue.h头文件的例程,有Makefile

    APUE是学习UNIX系统编程的经典教材,它提供了一个名为libapue的库,包含了各种实用的系统调用和函数封装,方便开发者进行系统级别的编程。libapue.a是一个静态库文件,其中包含了许多预编译的函数,而apue.h则包含了...

    apue-unix环境高级编程第三版(英文版)

    《Advanced Programming in the UNIX® Environment, Third Edition》(中译《APUE:UNIX环境高级编程第三版》)是由史蒂文斯(W. Richard Stevens)原作、斯蒂芬·Rago(Stephen A. Rago)修订的书籍,它被广泛认为...

    APUE3-master.rar

    《APUE3-master》压缩包文件是针对操作系统学习的一个资源集合,主要涵盖了Unix系统的源代码分析。这个资源对于深入理解Unix系统的工作原理以及系统编程有着极高的价值。下面,我们将详细探讨这个压缩包中可能包含的...

    Apue unix高级编程的源码

    Rago撰写,被广大程序员和系统管理员视为学习UNIX编程的重要参考书。源码分析可以帮助我们更直观地理解书中介绍的各种概念和技术,这对于提升在UNIX环境下的编程能力极其有价值。 在UNIX系统中,高级编程涉及到了...

    UNIX环境编程apue.h

    它包含了对一些常见UNIX系统调用和库函数的简化和扩展,使得学习和使用更加方便。例如,`apue.h`可能包含了一些错误处理的宏定义,以及对I/O、进程控制、信号处理等方面的便利函数。 配置`apue.h`的过程主要涉及...

    apue UNIX环境高级编程

    在学习和实践中,不仅要理解`apue.h`提供的功能,还要深入学习UNIX系统调用、进程管理、文件I/O、网络编程等内容。通过结合阅读《UNIX环境高级编程》和使用`apue.h`,你可以更好地掌握UNIX系统编程的精髓,这对于...

    APUE头文件与error文件

    在学习APUE的过程中,理解和使用"apue.h"和"error.c"是至关重要的。它们帮助开发者建立一个标准的错误处理框架,使得代码更加整洁、易于维护。通过阅读和分析这两个文件,我们可以了解到如何在实践中构建类似的工具...

    通过实用案例讲解apue的使用

    《通过实用案例讲解apue的使用》 APUE(Advanced Programing in the Unix Environment)是Leslie J. Ruyle在1992年出版的一本书,它是Unix环境下高级编程的经典教材,深受程序员喜爱。该书深入浅出地介绍了在Unix...

Global site tag (gtag.js) - Google Analytics