Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119621
  • 博文数量: 29
  • 博客积分: 1215
  • 博客等级: 中尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-05 16:29
文章分类
文章存档

2010年(29)

我的朋友

分类: C/C++

2010-12-05 16:47:02

预备知识:
1.系统调用getpid可以得到进程的ID,而getppid可以得到父进程(创建调用该函数进程的进程)的ID.
#include ;
pid_t getpid(void);
pid_t getppid(void);

2.通过系统调用getuid可以得到进程的所有者的ID.由于进程要用到一些资源,而Linux对系统资源是进行保护的,为了获取一定资源进程还有一个有效用户ID.这个ID和系统的资源使用有关,涉及到进程的权限. 通过系统调用geteuid我们可以得到进程的有效用户ID. 和用户ID相对应进程还有一个组ID和有效组ID系统调用getgid和getegid可以分别得到组ID和有效组ID
#include ;
#include ;

uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);

3.有时候我们还会对用户的其他信息感兴趣(登录名等等),这个时候我们可以调用getpwuid来得到.
struct passwd {
char *pw_name; /* 登录名称 */
char *pw_passwd; /* 登录口令 */
uid_t pw_uid; /* 用户ID */
gid_t pw_gid; /* 用户组ID */
char *pw_gecos; /* 用户的真名 */
char *pw_dir; /* 用户的目录 */
char *pw_shell; /* 用户的SHELL */
};
#include ;
#include ;

struct passwd *getpwuid(uid_t uid);

下面将通过一个程序实例来实践上面所列的函数:

#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc,char **argv)
{
    pid_t my_pid,myparent_pid;
    uid_t my_uid,my_euid;
    gid_t my_gid,my_egid;
    struct passwd *my_info;

    my_pid = getpid();
    myparent_pid = getppid();
    my_uid = getuid();
    my_euid = geteuid();
    my_gid = getgid();
    my_egid = getegid();
    my_info = getpwuid(my_uid);

    printf("Process ID:%ld\n",my_pid);
    printf("Parent ID:%ld\n",myparent_pid);
    printf("User ID:%ld\n",my_uid);
    printf("Effective User ID:%ld\n",my_euid);
    printf("Group ID:%ld\n",my_gid);
    printf("Effective Group ID:%ld\n",my_egid);

    if(my_info)
    {
        printf("My Login Name:%s\n",my_info->pw_name);
        printf("My Login Password:%s\n",my_info->pw_passwd);
        printf("My User ID:%ld\n",my_info->pw_uid);
        printf("My Group ID:%ld\n",my_gid);
        printf("My Real Name:%s\n",my_info->pw_gecos);
        printf("My Home Directory:%s\n",my_info->pw_dir);
        printf("My Work Shell:%s\n",my_info->pw_shell);
    }
}

下面是程序运行的结果:
Process ID:3574
Parent ID:2721
User ID:1000
Effective User ID:1000
Group ID:1000
Effective Group ID:1000
My Login Name:longmenyu
My Login Password:x
My User ID:1000
My Group ID:1000
My Real Name:longmenyu,,,
My Home Directory:/home/longmenyu
My Work Shell:/bin/bash




阅读(886) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:将命令行参数回送到标准输出

给主人留下些什么吧!~~

chinaunix网友2010-12-07 10:09:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com