linux c 编程之一 passwd文档用户分离

原创 2004年09月07日 23:49:00

linux c 编程之一 passwd文档用户分离


 一思路:

对于想分离lnux系统passwd文档里面的用户.如何实现

其实方法是很多.不过这里都是介绍自己的理解和做法.先看看passwd
文档里面的结构:

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

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

news:x:9:13:news:/etc/news:

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin


那怎样分离比较好呢.

如果能把第一个冒号前面的保存下来不就可以了.那如何实现?

 

二.函数介绍:

其实正好就有这样一个函数可以利用:

如果你在linux 下,可以立刻man strtok 来查看这个函数的manual:


NAME
   strtok, strtok_r - extract tokens from strings

 

SYNOPSIS
       #include <string.h>

      
char *strtok(char *s, const char *delim);

     
char *strtok_r(char *s, const char *delim, char **ptrptr);

 

DESCRIPTION
      
A `token' is a nonempty string of characters not occurring in the
      
string delim, followed by /0 or by a character occurring in delim.

      
The strtok() function can be used to parse the string s into tokens.
      
The first call to strtok() should have s as its first argument. Subse-
      
quent calls should have the first  argument  set  to NULL. Each  call
      
returns a pointer to the next token, or NULL when no more tokens are
 found.

       If a token ends with a delimiter,this delimiting character is over-ritten  with a /0 and a pointer to the next character is saved for the next call to strtok().  The delimiter string delim may be different for
each call.

      
The  strtok_r()  function  is a reentrant version of the strtok() function, which instead of using its own static buffer, requires a  pointer
 to  a user allocated char*. This pointer, the ptrptr parameter, must be
 the same while parsing the same string.

 

我贴出其中一些:


这个函数包含在库文件<string.h>:

#include<string.h>

结构是:

char *strtok(char * str1,const char * str2);

 

这个函数strtok()返回一个指针,指向串str1中的一个词法单位.组成串str2的字符是确定词法单位的间隔符.无词法单位时,函数返回空指针.

 

第一次调用strtok()时,实际使用str1;后继调用,必须在第一变元处使用空指针.这样整个串就被缩减为它的词法单位.对它的每次调用,都可能使用不同的一组间隔符串.

 

 

三.程序设计:


在window下也可用tc来编译


现在在linux 下.则:


建立一个文件.并命名为handleuser.c


nightcat@nightcat$vi handleuser.c

 

编辑其中内容:
 

/*username split version1.0
the small tools can slpit username from passwd and other passwd file
To Compile:
nightcat@nightcat$gcc -o handluser  handleuser.c
Usage:
./handleuser  <inputfile> <outputfile>
Code By Nihgtcat
Aprile 2003
*/
#include<string.h>
#include<stdio.h>

 


main(int argc,char *argv[])
{
         

FILE *in ;
         
FILE *out;

         
char buffer[1024];
         
char *username;

 

 
         
if(argc<3)
               
 printf("usage:%s <inputfile> <outputfiles>/n",argv[0]);

 

if((in=fopen(argv[1],"r"))==NULL)
                                  
 printf("file could not be opened/n");
                    if((out=fopen(argv[2],"w"))==NULL)
    
 printf("file could not be opened/n");

                 

while(!feof(in)){
                               
 fscanf(in,"%s",buffer);
              
 username=strtok(buffer,":");
             
 fprintf(out,"%s/n",username);
                                     
 }
 
       fclose(in);
                    
       fclose(out);
                    
       return 0;


}

 


保存文档:

按一下esc  退出编辑模式


:wq 保存退出

 

编译:

nightcat@nightcat$gcc -o handleuser handleuser.c


执行:
nightcat@nightcat$./handleuser  /etc/passwd /nightcat/username.txt
nightcat@nightcat$cat /nightcat/username.txt

root

bin

daemon

adm
lp

sync

shutdown

halt

mail

news

uucp

operator

games

gopher

ftp

nobody

ntp

..

..

..

..


四.后言:


  这个程序里面也有好几个基础的东西:

int argc  ,char *argv[] 的含义:argc 是指出有几个参数.argv是参数存放的地方.是一个指针的指针 char *argv[]

 

fopen ,fscanf ,fprintf,fclose.是文件打开,读入,写入,关闭.

 

feof是判断文件是否读完.

 

详细的资料看相关的man manual.


五.联系我:
nickname:nightcat

e-mail:ncnynl@hotmail.com

qq:1043931

icq:153436005

linux中非常详细的/etc/passwd解释

今天遇到一个问题,一直提示Operation not permitted,很明显,让人联想到权限问题,查了下passwd文件,果然如此。特搜了些详细解释记录‘ root:x:0:0:root:/...
  • AKmumu2010
  • AKmumu2010
  • 2013年08月12日 16:14
  • 1174

linux passwd批量修改用户密码

linux passwd批量修改用户密码   对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用 passwd user 这样的命令来修改密码,但是这样会进入交互模式,即使使用...
  • xuwuhao
  • xuwuhao
  • 2015年06月24日 10:32
  • 4877

【每天一个Linux命令】10. 用户账号的新建/修改/删除以及密码修改 useradd/usemod/userdel/passwd

在 Linux 系统中,与用户管理有关的文件主要有如下几个:分别是/etc/passwd,/etc/shadow,/etc/gfoup,/etc/gshadow 。它们分别与用户的账号,密码,用户组及...
  • wirelessqa
  • wirelessqa
  • 2013年08月18日 14:33
  • 11069

linux 的普通用户为什么能修改/etc/passwd文件

Unix 的口令文件 /etc/passwd 记录着所有用户和对应的登录密码等信息。/etc/passwd文件的所有者是root而且只有root用户有权限对该文件进行写操作。但是Unix系统其实是允许...
  • hyfcomeon
  • hyfcomeon
  • 2013年05月22日 00:45
  • 4886

shell批量添加用户

a、创建用户文件,因为添加的用户比较多,因此编写脚本创建一个用户文件user.txt         #!/bin/bash         #创建九个用户名和对应的密码         for...
  • havedream_one
  • havedream_one
  • 2015年04月24日 14:33
  • 2230

Linux 线程分离状态

线程的分离与结合     在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资...
  • chinaeran
  • chinaeran
  • 2015年02月10日 20:09
  • 1667

非常详细的/etc/passwd解释

/etc/passwd 该目录存储的是操作系统用户信息,该文件为所有用户可见。 给linux系统添加一个帐号: useradd -g mysql -d /home/test -m test(:新建一个...
  • jb19900111
  • jb19900111
  • 2013年10月29日 14:37
  • 2008

Linux中/etc/passwd文件的用法

原文地址:http://www.cnblogs.com/PandoraX/p/3978541.html 昨天被虚拟机网络samba问题殴打了一天,最终解决,睡了个好觉,一早醒来,想起看到类似这样一...
  • tanga842428
  • tanga842428
  • 2017年05月05日 12:44
  • 790

ubuntu修改、删除用户

1、修改ubuntu: root@XXXXX  我们需要修改这里的XXXXX 方法如下: Vi  /etc/hostname 修改XXXXX为whu即可显示:[root@whu ]# ...
  • liujun213
  • liujun213
  • 2014年11月30日 01:12
  • 740

linux系统之帮助命令(man)

linux系统之帮助命令(man)摘要:这个命令主要是查看系统命令中其它命令的参数、用法(如果搜索不到这个命令那就表示命令不是系统命令)。man的全称是manual,基础用法:man 【命令】;下面的...
  • u014150409
  • u014150409
  • 2016年06月15日 22:52
  • 1835
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux c 编程之一 passwd文档用户分离
举报原因:
原因补充:

(最多只允许输入30个字)