日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件

作者:孫曉明,華清遠(yuǎn)見(jiàn)嵌入式學(xué)院講師。

通過(guò)c語(yǔ)言基礎(chǔ)庫(kù)從獲取linux用戶(hù)的基本信息。

1、使用struct passwd管理用戶(hù)信息。

struct passwd

{

char *pw_name; /* 用戶(hù)登錄名 */

char *pw_passwd; /* 密碼(加密后)*/

__uid_t pw_uid; /* 用戶(hù)ID */

__gid_t pw_gid; /* 組ID */

char *pw_gecos; /* 詳細(xì)用戶(hù)名 */

char *pw_dir; /* 用戶(hù)目錄 */

char *pw_shell; /* Shell程序名 */

};

2、分析相并的系統(tǒng)文件/etc/passwd

⑴ root:x:0:0:root:/root:/bin/bash

⑵ daemon:x:1:1:daemon:/usr/sbin:/bin/sh

⑶ bin:x:2:2:bin:/bin:/bin/sh

在passwd文件中記錄的是所有系統(tǒng)用戶(hù)

每一行表示一個(gè)完整的struct passwd結(jié)構(gòu),以":"分隔出每一項(xiàng)值,其7項(xiàng)。

3、獲取系統(tǒng)當(dāng)前運(yùn)行用戶(hù)的基本信息。

#include <grp.h>

#include <pwd.h>

#include <unistd.h>

#include <stdio.h>

int main ()

{

uid_t uid;

struct passwd *pw;

struct group *grp;

char **members;

uid = getuid ();

pw = getpwuid (uid);

if (!pw)

{

printf ("Couldn"t find out about user %d.\n", (int)uid);

return 1;

}

printf ("I am %s.\n", pw->pw_gecos);

printf ("User login name is %s.\n", pw->pw_name);

printf ("User uid is %d.\n", (int) (pw->pw_uid));

printf ("User home is directory is %s.\n", pw->pw_dir);

printf ("User default shell is %s.\n", pw->pw_shell);

grp = getgrgid (pw->pw_gid);

if (!grp)

{

printf ("Couldn"t find out about group %d.\n",

(int)pw->pw_gid);

return 1;

}

printf ("User default group is %s (%d).\n",

grp->gr_name, (int) (pw->pw_gid));

printf ("The members of this group are:\n");

members = grp->gr_mem;

while (*members)

{

printf ("\t%s\n", *(members));

members++;

}

return 0;

}

編譯,結(jié)果輸出

$gcc -o userinfo userinfo.c

$./userinfo

I am root.

My login name is root.

My uid is 0.

My home is directory is /root.

My default shell is /bin/bash.

My default group is root (0).

The members of this group are:

test

user

test2

4、查看所有的用戶(hù)信息

使用pwd.h定義的方法getpwent(),逐行讀取/etc/passwd中的記錄,每調(diào)用getpwent函數(shù)一次返回一個(gè)完整用戶(hù)信息struct passwd結(jié)構(gòu)。

再次讀取時(shí),讀入下一行的記錄。

在使用之前先使用setpwent()打開(kāi)文件(如果文件關(guān)閉)或重定位到的文件開(kāi)始處,操作結(jié)束時(shí)使用endpwent()關(guān)閉/etc/passwd文件,避免對(duì)后面的使用產(chǎn)生負(fù)作用。

5、腳本操作,顯示所有用戶(hù)的信息中的name

使用cut命令將/etc/passwd中的內(nèi)容逐行解析,"-d:"以":"將一行劃分出7人字段列,-f1,為第一列

cut -d: -f1 /etc/passwd

“本文由華清遠(yuǎn)見(jiàn)http://www.embedu.org/index.htm提供”



華清遠(yuǎn)見(jiàn)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉