c语言在用户组新建用户(创建用户并添加到用户组的命令)

今天给各位分享c语言在用户组新建用户的知识,其中也会对创建用户并添加到用户组的命令进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、怎么用c语言写一个创建用户名和密码并且能2、C语言什么函数实现在本地添加用户和用户组3、vb或者C语言,向win7系统administrator用户组添加指定用户4、c语言用户注册代码5、C语言问题6、linux下安装Mysql必须要新建叫mysql的用户组和用户吗

怎么用c语言写一个创建用户名和密码并且能

#include

//我自己做的,你拿去用吧!

#include

struct

e

{

char

a[10];

char

b[10];

}z;

int

main()

{

int

t=0;

char

s[10],d[10];

FILE

*p;

void

as();

if

((p=fopen(“m.txt”,”r+”))==NULL)

{

p=fopen(“m.txt”,”w+”);

t=1;

}

if(t==1)

{

printf(“当前没有任何用户\n”);

printf(“请新建用户名:

“);

scanf(“%s”,s);

printf(“为用户设置密码:

“);

scanf(“%s”,d);

strcpy(z.a,s);

strcpy(z.b,d);

fprintf(p,”%s

%s”,z.a,z.b);

fclose(p);

}

if(t==0)

{

printf(“请输入用户名:

“);

scanf(“%s”,s);

fscanf(p,”%s

%s”,z.a,z.b);

fclose(p);

if

(!strcmp(z.a,s))

{

printf(“请输入密码:”);

scanf(“%s”,d);getchar();

if(!strcmp(z.b,d))

{

char

i;

printf(“是否要修改密码?(输入y修改,n退出!)”);

scanf(“%c”,i);

if(i==’y’)

{

printf(“请输入修改密码:”);

scanf(“%s”,z.b);

p=fopen(“m.txt”,”w+”);

fprintf(p,”%s

%s”,z.a,z.b);

fclose(p);

printf(“修改成功!”);

}

}

else

printf(“密码错误!”);

}

else

printf(“用户名错误”);

fclose(p);

}

}

C语言什么函数实现在本地添加用户和用户组

来个样例程序(输入两个数,求最大公约数) #include #include int a,b; int gcd(int x,int y) { if (x%y==0) return y; else return gcd(y,x%y); } int main() { scanf(“%d%d”,a,b); printf(“%d\n”,gcd(a,b)); return 0; }

vb或者C语言,向win7系统administrator用户组添加指定用户

1、用VisualStudio2010旗舰版,它是专为Win7打造的,其他的版本也可以兼容,而且支持VC/VB/C#多种语言开发,安装下来才2G多,是一款相当不错的开发软件。2、用开发版的比较好,学习版的有些功能减掉了。3、eclipseCDT也可以。纯绿色软件,解压缩就能用。完美支持win7。4、学一门语言最好的方式就是记事本+编译器。什么东西都要自己手写。这样映像才深。学的才透。5、VisualStudio(VS)是一套完整的开发工具集,用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。VisualBasic、VisualC++、VisualC#和VisualJ#全都使用相同的集成开发环境(IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了.NETFramework的功能,通过此框架可使用简化ASPWeb应用程序和XMLWebServices开发的关键技术。

c语言在用户组新建用户(创建用户并添加到用户组的命令)

c语言用户注册代码

C语言编程实现用户的注册和登录

#include “stdafx.h”

#include “string.h”

#define n 20

void zhuce();

void denglu();

char yhm[n],mm[n];

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

{

int i;

printf(“———–\n1.注册\n2.登陆\n3.继续\n0.退出\n”);

scanf(“%d”,i);

switch(i)

{case 0: break;

case 1 : zhuce();break;

case 2: denglu();break;

}

return 0;

}

void zhuce( )

{char temp1[n],temp2[n],temp3[n],yhmtmp[n];

printf(“输入用户名\n”);

fflush(stdin);//清空缓存

gets(yhmtmp);

printf(“输入密码\n”);

fflush(stdin);

gets(temp1);

printf(“输入密码确认\n”);

fflush(stdin);

gets(temp2);

if(!strcmp(temp1,temp2))

{strcpy(mm,temp1);

printf(“注册成功\n”);

}

else

{printf(“输入密码确认\n”);

gets(temp3);

if(!strcmp(temp1,temp3))

{strcpy(mm,temp1);

printf(“注册成功\n”);

}

else

printf(“注册失败\n”);

}

}

void denglu( )

{

char s1[n],s2[n];

printf(“输入用户名\n”);

fflush(stdin);

gets(s1);

printf(“输入密码\n”);

fflush(stdin);

gets(s2);

if((strcmp(s1,yhm))(strcmp(s2,mm)))

printf(“登陆成功\n”);

}

C语言问题

[color=blue]2)Linux程序设计入门–进程介绍[/color]

Linux下进程的创建

前言:

这篇文章是用来介绍在Linux下和进程相关的各个概念.我们将会学到:

进程的概念

进程的身份

进程的创建

守护进程的创建

—————————————————————————-

—-

1。进程的概念

Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命

令.那么操作系统是怎么实现多用户的环境呢? 在现代的操作系统里面,都有程序和进程

的概念.那么什么是程序,什么是进程呢? 通俗的讲程序是一个包含可以执行代码的文件

,是一个静态的文件.而进程是一个开始执行但是还没有结束的程序的实例.就是可执行文

件的具体实现. 一个程序可能有许多进程,而每一个进程又可以有许多子进程.依次循环

下去,而产生子孙进程. 当程序被系统调用到内存以后,系统会给程序分配一定的资源(内

存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用.在系统里面只

有进程没有程序,为了区分各个不同的进程,系统给每一个进程分配了一个ID(就象我们的

身份证)以便识别. 为了充分的利用资源,系统还对进程区分了不同的状态.将进程分为新

建,运行,阻塞,就绪和完成五个状态. 新建表示进程正在被创建,运行是进程正在运行,阻

塞是进程正在等待某一个事件发生,就绪是表示系统正在等待CPU来执行命令,而完成表示

进程已经结束了系统正在回收资源. 关于进程五个状态的详细解说我们可以看《操作系

统》上面有详细的解说。

2。进程的标志

上面我们知道了进程都有一个ID,那么我们怎么得到进程的ID呢?系统调用getpid可

以得到进程的ID,而getppid可以得到父进程(创建调用该函数进程的进程)的ID.

#include unistd;

pid_t getpid(void);

pid_t getppid(void);

进程是为程序服务的,而程序是为了用户服务的.系统为了找到进程的用户名,还为进程和

用户建立联系.这个用户称为进程的所有者.相应的每一个用户也有一个用户ID.通过系统

调用getuid可以得到进程的所有者的ID.由于进程要用到一些资源,而Linux对系统资源是

进行保护的,为了获取一定资源进程还有一个有效用户ID.这个ID和系统的资源使用有关

,涉及到进程的权限. 通过系统调用geteuid我们可以得到进程的有效用户ID. 和用户ID

相对应进程还有一个组ID和有效组ID系统调用getgid和getegid可以分别得到组ID和有效

组ID

#include unistd;

#include sys/types.h;

uid_t getuid(void);

uid_t geteuid(void);

gid_t getgid(void);

git_t getegid(void);

有时候我们还会对用户的其他信息感兴趣(登录名等等),这个时候我们可以调用getpwui

d来得到.

struct passwd {

char *pw_name; /* 登录名称 */

char *pw_passwd; /* 登录口令 */

uid_t pw_uid; /* 用户ID */

gid_t pw_gid; /* 用户组ID */

char *pw_gecos; /* 用户的真名 */

char *pw_dir; /* 用户的目录 */

char *pw_shell; /* 用户的SHELL */

};

#include pwd.h;

#include sys/types.h;

struct passwd *getpwuid(uid_t uid);

下面我们学习一个实例来实践一下上面我们所学习的几个函数:

#include unistd.h;

#include pwd.h;

#include sys/types.h;

#include stdio.h;

int main(int argc,char **argv)

{

pid_t my_pid,parent_pid;

uid_t my_uid,my_euid;

gid_t my_gid,my_egid;

struct passwd *my_info;

my_pid=getpid();

parent_pid=getppid();

my_uid=getuid();

my_euid=geteuid();

my_gid=getgid();

my_egid=getegid();

my_info=getpwuid(my_uid);

printf(“Process ID:%ld\n”,my_pid);

printf(“Parent ID:%ld\n”,parent_pid);

printf(“User ID:%ld\n”,my_uid);

printf(“Effective User ID:%ld\n”,my_euid);

printf(“Group ID:%ld\n”,my_gid);

printf(“Effective Group ID:%ld\n”,my_egid):

if(my_info)

{

printf(“My Login Name:%s\n” ,my_info-;pw_name);

printf(“My Password :%s\n” ,my_info-;pw_passwd);

printf(“My User ID :%ld\n”,my_info-;pw_uid);

printf(“My Group ID :%ld\n”,my_info-;pw_gid);

printf(“My Real Name:%s\n” ,my_info-;pw_gecos);

printf(“My Home Dir :%s\n”, my_info-;pw_dir);

printf(“My Work Shell:%s\n”, my_info-;pw_shell);

}

}

3。进程的创建

创建一个进程的系统调用很简单.我们只要调用fork函数就可以了.

#include unistd.h;

pid_t fork();

当一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只

有他的进程ID和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样.当然创建

两个一模一样的进程是没有意义的.为了区分父进程和子进程,我们必须跟踪fork的返回

值. 当fork掉用失败的时候(内存不足或者是用户的最大进程数已到)fork返回-1,否则f

ork的返回值有重要的作用.对于父进程fork返回子进程的ID,而对于fork子进程返回0.我

们就是根据这个返回值来区分父子进程的. 父进程为什么要创建子进程呢?前面我们已经

说过了Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源.有时

进程为了早一点完成任务就创建子进程来争夺资源. 一旦子进程被创建,父子进程一起从

fork处继续执行,相互竞争系统的资源.有时候我们希望子进程继续执行,而父进程阻塞直

到子进程完成任务.这个时候我们可以调用wait或者waitpid系统调用.

#include sys/types.h;

#include sys/wait.h;

pid_t wait(int *stat_loc);

pid_t waitpid(pid_t pid,int *stat_loc,int options);

wait系统调用会使父进程阻塞直到一个子进程结束或者是父进程接受到了一个信号.如果

没有父进程没有子进程或者他的子进程已经结束了wait回立即返回.成功时(因一个子进

程结束)wait将返回子进程的ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的

退出状态.子进程调用exit,_exit 或者是return来设置这个值. 为了得到这个值Linux定

义了几个宏来测试这个返回值.

WIFEXITED:判断子进程退出值是非0

WEXITSTATUS:判断子进程的退出值(当子进程退出时非0).

WIFSIGNALED:子进程由于有没有获得的信号而退出.

WTERMSIG:子进程没有获得的信号号(在WIFSIGNALED为真时才有意义).

waitpid等待指定的子进程直到子进程返回.如果pid为正值则等待指定的进程(pid).如果

为0则等待任何一个组ID和调用者的组ID相同的进程.为-1时等同于wait调用.小于-1时等

待任何一个组ID等于pid绝对值的进程. stat_loc和wait的意义一样. options可以决定

父进程的状态.可以取两个值 WNOHANG:父进程立即返回当没有子进程存在时. WUNTACHE

D:当子进程结束时waitpid返回,但是子进程的退出状态不可得到.

父进程创建子进程后,子进程一般要执行不同的程序.为了调用系统程序,我们可以使用系

统调用exec族调用.exec族调用有着5个函数.

#include unistd.h;

int execl(const char *path,const char *arg,…);

int execlp(const char *file,const char *arg,…);

int execle(const char *path,const char *arg,…);

int execv(const char *path,char *const argv[]);

int execvp(const char *file,char *const argv[]):

exec族调用可以执行给定程序.关于exec族调用的详细解说可以参考系统手册(man exec

l). 下面我们来学习一个实例.注意编译的时候要加 -lm以便连接数学函数库.

#include unistd.h;

#include sys/types.h;

#include sys/wait.h;

#include stdio.h;

#include errno.h;

#include math.h;

void main(void)

{

pid_t child;

int status;

printf(“This will demostrate how to get child status\n”);

if((child=fork())==-1)

{

printf(“Fork Error :%s\n”,strerror(errno));

exit(1);

}

else if(child==0)

{

int i;

printf(“I am the child:%ld\n”,getpid());

for(i=0;i1000000;i++) sin(i);

i=5;

printf(“I exit with %d\n”,i);

exit(i);

}

while(((child=wait(status))==-1)(errno==EINTR));

if(child==-1)

printf(“Wait Error:%s\n”,strerror(errno));

else if(!status)

printf(“Child %ld terminated normally return status is zero\n”,

child);

else if(WIFEXITED(status))

printf(“Child %ld terminated normally return status is %d\n”,

child,WEXITSTATUS(status));

else if(WIFSIGNALED(status))

printf(“Child %ld terminated due to signal %d znot caught\n”,

child,WTERMSIG(status));

}

strerror函数会返回一个指定的错误号的错误信息的字符串.

4。守护进程的创建

如果你在DOS时代编写过程序,那么你也许知道在DOS下为了编写一个常驻内存的程序

我们要编写多少代码了.相反如果在Linux下编写一个”常驻内存”的程序却是很容易的.我

们只要几行代码就可以做到. 实际上由于Linux是多任务操作系统,我们就是不编写代码

也可以把一个程序放到后台去执行的.我们只要在命令后面加上符号SHELL就会把我们的

程序放到后台去运行的. 这里我们”开发”一个后台检查邮件的程序.这个程序每个一个指

定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇

叭来发出声音). 后面有这个函数的加强版本加强版本

后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无

情?). 信号处理所有的工作由子进程来处理.

#include unistd.h;

#include sys/types.h;

#include sys/stat.h;

#include stdio.h;

#include errno.h;

#include fcntl.h;

#include signal.h;

/* Linux 的默任个人的邮箱地址是 /var/spool/mail/用户的登录名 */

#define MAIL “/var/spool/mail/hoyt”

/* 睡眠10秒钟 */

#define SLEEP_TIME 10

main(void)

{

pid_t child;

if((child=fork())==-1)

{

printf(“Fork Error:%s\n”,strerror(errno));

exit(1);

}

else if(child;0)

while(1);

if(kill(getppid(),SIGTERM)==-1)

{

printf(“Kill Parent Error:%s\n”,strerror(errno));

exit(1);

}

{

int mailfd;

while(1)

{

if((mailfd=open(MAIL,O_RDONLY))!=-1)

{

fprintf(stderr,”%s”,”\007″);

close(mailfd);

}

sleep(SLEEP_TIME);

}

}

}

你可以在默认的路径下创建你的邮箱文件,然后测试一下这个程序.当然这个程序还有很

多地方要改善的.我们后面会对这个小程序改善的,再看我的改善之前你可以尝试自己改

善一下.比如让用户指定邮相的路径和睡眠时间等等.相信自己可以做到的.动手吧,勇敢

的探险者.

好了进程一节的内容我们就先学到这里了.进程是一个非常重要的概念,许多的程序都会

用子进程.创建一个子进程是每一个程序员的基本要求!

请采纳。

linux下安装Mysql必须要新建叫mysql的用户组和用户吗

编译不需要,但是安装需要。

之所以安装的脚本不自动给你创建好用户跟用户组,是因为每个 Linux 发行版创建用户的方法都不同(其实只是略有不同,但完全兼容很困难)。

如果你使用发行版自带的 mysql,那么发行版的安装包已经把这些工作做了,所以直接使用发行版自带的 mysql 会自动帮你创建相关用户跟用户组。

如果你自行编译 mysql,从 mysql 源代码开发者的角度不可能主动去做所有发行版的适配,所以只能让你自己去创建用户跟用户组。

Mysql —— C语言链接mysql数据库,用户 角色 权限 用户组(新增了用户组)

chengelog:

1、新增 添加用户组模块;

2、新增 显示用户组模块;

3、修改 新增用户模块 选择 其所属用户组 并把用户id与用户组id 写入用户用户组关系表;

4、新增 修改用户以及删除用户组模块(有用户属于该用户组 用户组名字不允许更改 用户组不允许删除);

5、新增 增加用户、用户组时候,若要增加的用户名已存在(给出用户存在的提示信息);

6、修改了 显示的界面问题;

7、修改部分switch case 输入为字符;

8、修改部分 操作完成后 有两次回车 确认的问题;

遗留的问题:

1、switch case 输入为字符,应该改为case a:bresk; case b:break;…… 否则输入的1与10是一样的执行结果;

字符中只有数字0-9;

2、在remark字段中 scanf()函数是不允许输入空格的。

c语言在用户组新建用户的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于创建用户并添加到用户组的命令、c语言在用户组新建用户的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 09:05:05
下一篇 2024年4月2日 09:13:16

相关推荐

  • 为linux命令做链接gcc,linux cp 链接文件

    linux系统中gcc的命令怎么用? 1、linux系统常用操作命令linux系统常用操作命令如下:ls:全拼list,功能是列出目录的内容及其内容属性信息。cd:全拼change directory,功能是从当前工作目录切换到指定的工作目录。cp:全拼copy,其功能为复制文件或目录。 2、linux系统常用操作命令如下:ls:全拼list,功能是列出目录…

    2024年5月23日
    4200
  • 用c语言写cd命令,c语言编译命令

    C语言,这个p保存的是字符串cd首地址还是字符串cd这个常量 1、字符串常量的地址是字符串保存在内存的一组地址。字符数组的首地址代表着该字符串第一个元素的地址。字符指针是指向字符类型的指针。 2、是个字符串常量,指向它的指针是const char*,所以这条语句其实是:char* p = (const char*)123431; 将一个const变量赋值给非…

    2024年5月23日
    4600
  • linux上传文件覆盖,linux文件覆盖命令

    linux怎样将文件覆盖到另一个文件 1、cp -f 强行复制文件或目录,不论目标文件或目录是否已存在。 2、linux系统使用cp命令即可将一个文件夹里面的文件复制到另外一个文件夹里面。这个命令相当于dos下面的copy命令,具体用法是:cp_r源文件目的文件,其中参数r是指连同源文件中的子目录一同拷贝。 3、Linux cp命令主要用于复制文件或目录,英…

    2024年5月23日
    3900
  • linux下id命令,linux中的id命令

    linux常用命令及用法 1、linux常用命令:pwd命令该命令的英文解释为printworkingdirectory(打印工作目录)。输入pwd命令,Linux会输出当前目录。cd命令cd命令用来改变所在目录。linux基本操作命令如下:查看内核版本:uname-a。 2、linux常用命令有pwd命令、cd命令、ls命令、cat命令、grep命令、to…

    2024年5月23日
    4600
  • linuxvi命令不能用,linuxvim命令无法使用

    在linux虚拟系统的新建终端里输入vim等说命令找不到是怎么回事,求具体… 1、linux系统自带的是vi编辑器,在使用vim还得安装redhat/debian/fedora用yum install vim命令,debian/ubutnu/ubuntukylin用sudo apt-get install vim,两种方法都得用root权限安装。…

    2024年5月23日
    4900
  • linux删除分区命令,linux删掉分区

    怎么删除linux分区 1、右击计算机、管理、磁盘管理、选择没有盘符名称的分区、右击,点击删除逻辑分区即可。 2、fdisk命令可以对磁盘分区进行维护,包括查询,增加,删除等功能 使用方法:fdisk /dev/xxxx 进入后,p命令显示当前分区表信息,其它操作可以通过帮助命令了解。 3、linux分区在这里面显示的应该是未分配空间,或者未知空间,记不太清…

    2024年5月23日
    3900
  • linux取文件最后两列,linux命令到文件最后一行

    Linux下如何在不解压的情况下快速获得100G的gz文件最后几行内容。 1、用命令 gzip -l 压缩文件 |awk {print $4} 可将压缩文件中的文件名一一列出。 2、直接读取 一个gz压缩文件的方法:直接创建了一个内容:asdfasdfasfd 的 txt文件并用gzip 压缩。读取:$ zcat txt.gz asdfasdfasfd。如果…

    2024年5月23日
    4800
  • c语言变量命令规则的简单介绍

    c语言程序中对变量的使用必须必须遵循什么原则?这样做的好处是什么… 变量的使用需遵循:先定义后使用的原则。这样做的好处:1 对于编译器处理更方便。2 不容易出错。3 程序更清晰。 变量要“先定义,后使用”,就是为了在内存的相应地址中开辟一个这个变量专用的空间,也是为了计算机在使用这个变量的时候可以方便地找到这个变量在内存中所在的位置,以便于下一步…

    2024年5月23日
    5000
  • linuxusleep命令,linux sleep 2

    在linux下,想用sleep函数实现延时五秒,应该怎么设参数? 1、sleep(参数)参数 时间:指定要暂停时间的长度。时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数。 2、而如果在Linux下也用微妙为单位休眠,可以使用线程休眠函数:void usleep(unsigned long usec)。 3、在li…

    2024年5月23日
    4300
  • linux磁盘接口,linux磁盘相关命令

    IDE1接口主硬盘第一个逻辑分区在Linux系统怎么表示 1、使用数字编号为了表示不同的分区,通常会用数字进行编号,比如: 系统的第一块 IDE 接口硬盘的第 1 个分区称为 /dev/hda1。系统的第一块 IDE 接口硬盘的第 5 个分区称为 /dev/hda5。 2、第一个IDE第一分区叫做/dev/hda1,第一块IDE第五分区叫做/dev/hda5…

    2024年5月23日
    4700

发表回复

登录后才能评论



关注微信