简介
专业从事网站制作、网站建设,高端网站制作设计,微信平台小程序开发,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用H5技术+CSS3前端渲染技术,成都响应式网站建设,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
在Linux系统中,getuid函数是一个获取当前用户ID的系统调用函数,被广泛地应用在各种应用程序开发中。本文将讨论getuid函数的用途、使用方法、函数返回值及其含义等问题,并结合实例深入介绍其使用方法。
getuid函数的定义和功能
getuid函数,英文全名是 “get user ID”,它是一个从Linux内核中获取当前用户ID(User ID)的函数。而什么是 User ID 呢?我们知道,Linux下的每个用户都拥有一个唯一的数字标识,它就是 User ID。一个系统中的所有用户ID都被记录在 /etc/passwd 文件中,而 getuid 函数就是为了从这个文件中获取当前用户的ID。
对于一个程序来说,知道当前用户的 User ID 是非常重要的。因为只有知道了 User ID,程序才可以基于用户来进行各种操作,比如读取或写入其个人数据、调用相应的用户权限等等。而 getuid 函数就是一个帮助程序获取当前用户ID的重要接口。
使用方法
getuid 函数的使用相当简单,它只包含了一个参数:void。当程序调用 getuid 函数时,getuid 函数会自动从内核中读取当前用户的ID,并返回其数值。下面是 getuid 函数的完整调用代码示例:
“`
#include
#include
int mn() {
uid_t uid;
uid = getuid();
printf(“User ID: %d\n”, uid);
return 0;
}
“`
上述代码先定义了一个整型变量uid,并声明其类型为 uid_t,这是使用 getuid 函数必须进行的声明。之后,调用 getuid 函数,并将返回值存储到 uid 中,最后使用 printf 函数输出 uid 的值,即为当前用户的 User ID。
函数返回值及其含义
getuid 函数的返回值类型为 uid_t,其取值范围在 0 – 65535 之间,其中:
– 0:表示用户标识为 root 用户。
– 大于0:表示用户标识为普通用户,其值等同于该用户在 /etc/passwd 文件中的 ID。
– -1:表示在调用过程中出现了错误,例如权限不足等。
需要注意的是,getuid 函数只能获取当前用户的ID,如果需要获取其他用户的ID,则需要使用 getpwnam 或 getpwuid 函数进行查询。
结语
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220myping.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_SIZE 1024
char send_buf;
char recv_buf;
int nsend = 0,nrecv = 0;
int datalen = 56;
//统计结果
void statistics(int signum)
{
printf(“\n–PING statistics-\n”);
printf(“%d packets tranitted,%d recevid,%%%d lost\n”,nsend,nrecv,(nsend – nrecv)/nsend * 100);
exit(EXIT_SUCCESS);
}
/隐配/校验和算法
int calc_chsum(unsigned short *addr,int len)
{
int sum = 0,n = len;
unsigned short answer = 0;
unsigned short *p = addr;
//每两个字节相加
while(n > 1)
{
sum += *p ++;
n -= 2;
}
//处理数据大小是奇数,在最后一个字节后面补0
if(n == 1)
{
*((unsigned char *)&answer) = *(unsigned char *)p;
sum += answer;
}
//将得到的sum值的高樱携坦2字节和低2字节相加
sum = (sum >> 16) + (sum & 0xffff);
//处理溢出的情况
sum += sum >> 16;
answer = ~sum;
return answer;
}
int pack(int pack_num)
{
int packsize;
struct icmp *icmp;
struct timeval *tv;
icmp = (struct icmp *)send_buf;
icmp->icmp_type = ICMP_ECHO;
icmp->icmp_code = 0;
icmp->icmp_cksum = 0;
icmp->icmp_id = htons(getpid());
icmp->icmp_seq = htons(pack_num);
tv = (struct timeval *)icmp->icmp_data;
//记录发送时间
if(gettimeofday(tv,NULL) icmp_cksum = calc_chsum((unsigned short *)icmp,packsize);
return packsize;
}
int send_packet(int sockfd,struct sockaddr *paddr)
{
int packsize;
//将send_buf填上a
memset(send_buf,’a’,sizeof(send_buf));
nsend ++;
//打icmp包
packsize = pack(nsend);
if(sendto(sockfd,send_buf,packsize,0,paddr,sizeof(struct sockaddr)) tv_usec – tv_send->tv_usec tv_sec –;
tv_recv->tv_usec +=;
}
ts.tv_sec = tv_recv->tv_sec – tv_send->tv_sec;
ts.tv_usec = tv_recv->tv_usec – tv_send->tv_usec;
return ts;
}
int unpack(int len,struct timeval *tv_recv,struct sockaddr *paddr,char *ipname)
{
struct ip *ip;
struct icmp *icmp;
struct timeval *tv_send,ts;
int ip_head_len;
float rtt;
ip = (struct ip *)recv_buf;
ip_head_len = ip->ip_hl icmp_id) == getpid() && icmp->icmp_type == ICMP_ECHOREP)
{
nrecv ++;
tv_send = (struct timeval *)icmp->icmp_data;
ts = time_sub(tv_send,tv_recv);
rtt = ts.tv_sec * 1000 + (float)ts.tv_usec/1000;//以毫秒为单位
printf(“%d bytes from %s (%s):icmp_req = %d ttl=%d time=%.3fms.\n”,
len,ipname,inet_ntoa(((struct sockaddr_in *)paddr)->sin_addr),ntohs(icmp->icmp_seq),ip->ip_ttl,rtt);
}
return 0;
}
int recv_packet(int sockfd,char *ipname)
{
int addr_len ,n;
struct timeval tv;
struct sockaddr from_addr;
addr_len = sizeof(struct sockaddr);
if((n = recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,&from_addr,&addr_len)) p_proto)) h_addr,host->h_length);
}else{//ip地址
peer_addr.sin_addr.s_addr = netaddr;
}
//注册信号处理函数
signal(SIGALRM,statistics);
signal(SIGINT,statistics);
alarm(5);
//开始信息
printf(“PING %s(%s) %d bytes of data.\n”,argv,inet_ntoa(peer_addr.sin_addr),datalen);
//发送包文和接收报文
while(1)
{
send_packet(sockfd,(struct sockaddr *)&peer_addr);
recv_packet(sockfd,argv);
alarm(5);
sleep(1);
}
exit(EXIT_SUCCESS);
}
gcc -o myping myping.c
./myping 10.1.1.1
PING 10.1.1.1(10.1.1.1) 56 bytes of data.
64 bytes from 10.1.1.1 (10.1.1.1):icmp_req = 1 ttl=253 time=10.573ms.
64 bytes from 10.1.1.1 (10.1.1.1):icmp_req = 2 ttl=253 time=12.585ms.
64 bytes from 10.1.1.1 (10.1.1.1):icmp_req = 3 ttl=253 time=9.440ms.
64 bytes from 10.1.1.1 (10.1.1.1):icmp_req = 4 ttl=253 time=12.923ms.
谁告诉你的数组最后一位会自动分配0?
自动分配的腔散念,只有字符串格式化函数会这么做,比如strcpy,比如gets等等,而定义的数掘含组不会这样。
更何况,程序逻辑中,r并不是数组伍困的最后一位。
没有初始化的数组里面是随机数,不是0
linux下getuid的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux下getuid,Linux下getuid函数获取用户ID的使用方法,linux下如何用socket套接字来代替ping程序来检测终端网络连通性??急求(附代码加悬赏啊),linux环境下read函数读文件时,为什么要把最后一位置0?的信息别忘了在本站进行查找喔。
成都创新互联科技公司主营:网站设计、网站建设、小程序制作、成都软件开发、网页设计、微信开发、成都小程序开发、网站制作、网站开发等业务,是专业的成都做小程序公司、成都网站建设公司、成都做网站的公司。创新互联公司集小程序制作创意,网站制作策划,画册、网页、VI设计,网站、软件、微信、小程序开发于一体。
新闻名称:Linux下getuid函数获取用户ID的使用方法(linux下getuid)
本文来源:http://www.shufengxianlan.com/qtweb/news0/170550.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联