拒绝语言暴力作文800字:求人帮我解释下C代码意思。

来源:百度文库 编辑:高考问答 时间:2024/04/28 07:07:24
希望在主要一些句子后帮我带上注释。。非常感谢。。课程设计急需啊。

注册和退出函数 login( )和logout( ) (文件名 log.c)
#include "stdio.h"
#include "filesys.h"
int login(uid,passwd)
unsigned short uid;
char *passwd;
{ int i,j;

for(i=0;i<PWDNUM;i++)
{ if((uid==pwd[i].p_uid)&&(!strcmp(passwd,pwd[i].password)))
{
for(j=0;j<USERNUM;j++)
if(user[j].u_uid==0)
{
break;
}

if(j==USERNUM)
{ printf("\ntoo much user in the system,please wait to login \n");
return 0;
}
else
{
user[j].u_uid=uid;
user[j].u_gid=pwd[i].p_gid;
user[j].u_default_mode=DEFAULTMODE;
}
break;
}
}
if(i==PWDNUM)
{ printf("\nincorrect password \n");
return 0;
}
else
return 1;
}

int logout(uid) /*logout*/
unsigned short uid;
{ int i,j,k,sys_no;
struct inode *inode;
for(k=0;k<USERNUM;k++)
if(uid==user[k].u_uid)
{
i = k;
break;
}
if(k==USERNUM)
{ printf("\n no such a user \n");
return NULL;
}
for(j=0;j<NOFILE;j++)
{ if (user[i].u_ofile[j]!=SYSOPENFILE+1)
{ /* iput the inode free the sys_ofile and clear the user_ofile*/
sys_no=user[i].u_ofile[j];
inode=sys_ofile[sys_no].f_inode;
iput(inode);
sys_ofile[sys_no].f_count--;
user[i].u_ofile[j]=SYSOPENFILE+1;
}
}
return 1;
}

首先要理解几个全局变量的作用:
pwd:记录系统中存在的用户的id(p_uid)和密码(password)
user:记录实际登入系统的用户的id(u_uid)、gid(u_gid)等信息

代码分析如下:
#include "stdio.h"
#include "filesys.h"
int login(uid,passwd)
unsigned short uid;
char *passwd;
{ int i,j;

for(i=0;i<PWDNUM;i++) //逐个对照系统中存在的用户信息
{
if((uid==pwd[i].p_uid)&&(!strcmp(passwd,pwd[i].password)))//用户id和密码匹配
{
for(j=0;j<USERNUM;j++)
if(user[j].u_uid==0) //有空余的用户位置,即当前登入的用户数未达到USERNUM
{
break;
}

if(j==USERNUM) //用户登录满员
{ printf("\ntoo much user in the system,please wait to login \n");
return 0;
}
else //登记成功,记录用户信息并作相应设置
{
user[j].u_uid=uid;
user[j].u_gid=pwd[i].p_gid;
user[j].u_default_mode=DEFAULTMODE;
}
break;
}
}
if(i==PWDNUM) //未在系统存在的用户中找到配置的
{ printf("\nincorrect password \n");
return 0;
}
else
return 1; //登记成功
}

int logout(uid) /*logout*/
unsigned short uid;
{ int i,j,k,sys_no;
struct inode *inode;
for(k=0;k<USERNUM;k++)
if(uid==user[k].u_uid) //找出在登录在系统中的相应用户
{
i = k;
break;
}
if(k==USERNUM) //需要注销的用户未找到
{ printf("\n no such a user \n");
return NULL;
}
for(j=0;j<NOFILE;j++) //这里估计是关闭该用户打开的文件或加载的模块
{ if (user[i].u_ofile[j]!=SYSOPENFILE+1)
{ /* iput the inode free the sys_ofile and clear the user_ofile*/
sys_no=user[i].u_ofile[j];
inode=sys_ofile[sys_no].f_inode;
iput(inode);
sys_ofile[sys_no].f_count--; //文件在系统中的调用引用减1
user[i].u_ofile[j]=SYSOPENFILE+1;
}
}
return 1;
}

注册和退出函数 login( )和logout( ) (文件名 log.c)
#include "stdio.h" 注册和退出函数
#include "filesys.h" 注册和退出函数
int login(uid,passwd) 注册和退出函数
unsigned short uid; 注册和退出函数
char *passwd; 注册和退出函数
{ int i,j; 注册和退出函数

for(i=0;i<PWDNUM;i++)
注册和退出函数{ if((uid==pwd[i].p_uid)&&(!strcmp(passwd,pwd[i].password))) 注册和退出函数
{
for(j=0;j<USERNUM;j++) 注册和退出函数
if(user[j].u_uid==0) 注册和退出函数
{
break; 注册和退出函数
}

if(j==USERNUM) 注册和退出函数
{ printf("\ntoo much user in the system,please wait to login \n"); v注册和退出函数
return 0;
}
else
{ 注册和退出函数
user[j].u_uid=uid;
user[j].u_gid=pwd[i].p_gid;
user[j].u_default_mode=DEFAULTMODE;
}
break; 注册和退出函数
}
}
if(i==PWDNUM)
{ printf("\nincorrect password \n");
return 0;
}
else
return 1;
}

int logout(uid) /*logout*/
unsigned short uid;
{ int i,j,k,sys_no;
struct inode *inode;
for(k=0;k<USERNUM;k++)
if(uid==user[k].u_uid)
{
i = k;
break;
}
if(k==USERNUM)
{ printf("\n no such a user \n");
return NULL;
}
for(j=0;j<NOFILE;j++)
{ if (user[i].u_ofile[j]!=SYSOPENFILE+1)
{ /* iput the inode free the sys_ofile and clear the user_ofile*/
sys_no=user[i].u_ofile[j];
inode=sys_ofile[sys_no].f_inode;
iput(inode);
注册和退出函数
user[i].u_ofile[j]=SYSOPENFILE+1; 注册和退出函数
} 注册和退出函数
}
return 1; 注册和退出函数
}