linux下使用系统调用取得当前用户名

原创 2004年09月15日 12:30:00

直接使用geteuid()得到的是当前用户的编号,要得到用户名,还需要到/etc/passwd中去取得相应编号的用户名

程序如下

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>

#define max 8192
#define umax 128

int slip(char *,char *,char*);
int char2int(char *);

int main()
{
  int fp;
  FILE* stream;
  uid_t cuser;
  char temp[umax][max];
  char fname;
  int i=0;
  char cname[20];
  char userid[10];
  cuser=geteuid();
  if((stream=fopen("/etc/passwd","r"))==NULL)exit(1);
  while((fname=fgetc(stream))!=EOF)
   {
     temp[i][0]=fname;
     if(fgets(&temp[i++][1],max,stream)==NULL)exit(1);
   }
 for(i=0;i<umax&&temp[i][0];i++)
   {
     if(slip(temp[i],cname,userid)==0)exit(1);
     if(cuser==char2int(userid))break;
   }
 printf("the users name is %s/n",cname);
}

int slip(char* str,char* name,char* userid)
{
  int i=0,j=0,k;
  char* cp;
  char retvalu[10]={};
  for(k=0;k<20;k++)
    name[k]=0;
  cp=str;
  while((*cp)!=':')
    {
      name[i++]=*cp;
      cp++;
    }
  cp++;
  while((*cp)!=':')
    {
      cp++;
    }
  cp++;
  while((*cp)!=':')
    {
      retvalu[j++]=*cp;
      cp++;
    }
  k=0;
  while(k<10)
    {
      userid[k]=retvalu[k];
      k++;
     };
  if(name==NULL)return 0;
  return 1;
}

int char2int(char* ca)
{
  char* p;
  int ret;
  p=ca;
  if(p[4])
    {
      return ret=((int)p[0]-48)*10000+((int)p[1]-48)*1000+((int)p[2]-48)*100+((int)p[3]-48)*10+((int)p[4]-48);
    }
  else if(p[3])
    {
      return ret=((int)p[0]-48)*1000+((int)p[1]-48)*100+((int)p[2]-48)*10+((int)p[3]-48);
    }
  else if(p[2])
    {
      return ret=((int)p[0]-48)*100+((int)p[1]-48)*10+((int)p[2]-48);
    }
  else if(p[1])
    {
      return ret=((int)p[0]-48)*10+((int)p[1]-48);
    }
  else if(p[0])
    {
      return ret=((int)p[0]-48);
    }
  else
    return 0;
}

linux下使用系统调用取得当前用户名 (修订)

看了网友给的留言,原来得到当前用户名可以不是那么麻烦,修改一下,感谢网友yxx2008  #include #include #include #include int main(){  uid_t ...
  • rainman1981
  • rainman1981
  • 2004年09月23日 09:29
  • 722

linux下使用系统调用取得当前用户名

直接使用geteuid()得到的是当前用户的编号,要得到用户名,还需要到/etc/passwd中去取得相应编号的用户名程序如下#include #include #include #include #...
  • SSSUUNNYY
  • SSSUUNNYY
  • 2013年08月29日 10:44
  • 560

Linux下简单的系统调用

嵌入式汇编实现简单的系统调用
  • ven_kon
  • ven_kon
  • 2017年03月17日 21:31
  • 254

如何获取Windows系统登陆用户名

本文示例源代码或素材下载一般用 GetUserName(或 GetUserNameEx )函数可得到当前登陆登陆用户名(但不总会得到,下面会分析),此系统函数在Win95、WinNT 及以后所有操作系...
  • dlyhlq
  • dlyhlq
  • 2008年02月23日 18:33
  • 1615

[GNU/Linux] Linux系统调用-线程相关(一):基本知识

线程包含的信息:每个线程中都包含有表示自身执行环境的信息,其中至少包括:标识线程的线程ID、一组寄存器的值、栈、调度优先级和策略、信号屏蔽字、errno变量和线程的私有数据。 线程函数的错误处理...
  • hepangda
  • hepangda
  • 2017年07月25日 19:16
  • 245

MVC3获取登录用户名

session 不为空。 用 Page.User.Identity.Name 或者 HttpContext.Current.User.Identity.Name取得用户名。或者全称System.We...
  • Raywang80s
  • Raywang80s
  • 2017年07月10日 14:13
  • 488

Python获取当前系统用户名

Python获取当前系统用户名 转自http://www.codecho.com/get-current-username-in-python 某些时候我们需要获得系统当前的用户名,那么在Pyto...
  • chinaren0001
  • chinaren0001
  • 2013年01月28日 15:44
  • 2251

Linux命令之获取操作系统信息-uname

参考:uname命令》-linux命令五分钟系列之五 uname(unix name) 用于查看操作系统的信息 #显示系统详细信息-依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型...
  • u011453631
  • u011453631
  • 2014年02月24日 20:49
  • 2414

cp命令的编写——浅谈系统调用

摘要:linux中cp命令的实现,通过这个程序,我们需要了解系统调用耗费时间的方面,同时学会系统调用的错误处理机制。...
  • trochiluses
  • trochiluses
  • 2013年09月05日 08:45
  • 1828

Linux下添加系统调用实例

  • wanxiao009
  • wanxiao009
  • 2010年03月30日 20:05
  • 3106
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下使用系统调用取得当前用户名
举报原因:
原因补充:

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