最近项目中需要用C语言实现Linux用户和用户组的创建,需要在C语言中调用adduser等命令。因为adduser这类命令需要在命令行中进行输入交互,不能通过system函数来实现,所以想要用进程管道来进行进程间的输入交互。

下面是我用进程管道实现的具体代码,希望对有类似需求的同学有帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int adduser(char *user, char *home, char *passwd)
{int status = 0;FILE * fd = NULL;char cmd[1024] = {0};char param[256] = {0};/* get adduser shell command */sprintf(cmd, "adduser --home %s %s >> /dev/null 2>&1", home, user);fd = popen(cmd, "w");if (!fd) {printf("create adduser pipe failed.\n");return -1;}/* get password */sprintf(param, "%s\n", passwd);/* Enter new UNIX password */status = fwrite(param, 1, strlen(param), fd);if (status < 0) {printf("write pipe failed.\n");goto error;}/* Retype new UNIX password */status = fwrite(param, 1, strlen(param), fd);if (status < 0) {printf("write pipe failed.\n");goto error;}/* get other param */memset(param, 0, sizeof(param));sprintf(param, "\n\n\n\n\n\n");/* pass other options */status = fwrite(param, 1, strlen(param), fd);if (status < 0) {printf("write pipe failed.\n");goto error;}pclose(fd);/* check new user */memset(cmd, 0, sizeof(cmd));sprintf(cmd, "cat /etc/group | grep %s", user);fd = popen(cmd, "r");if (!fd) {printf("create check user pipe failed.\n");return -1;}status = fread(param, 1, sizeof(param), fd);if (status <= 0) {printf("adduser failed.\n");goto error;}pclose(fd);return 0;error:pclose(fd);return -1;
}int main(void)
{int status = 0;status = adduser("mm", "/home/zzs/work/test", "123123");if (!status) {printf("adduser success!!!\n");}return 0;
}

用C语言调用adduser命令相关推荐

  1. C语言调用Cmd命令以及执行系统软件

    C语言调用Cmd命令以及执行系统软件 system("explorer.exe")文件夹管理器 system("explorer.exe c:");打开C盘 s ...

  2. linux下如何用c语言调用shell命令-转

    C程序调用shell脚本共有三种法子 :system().popen().exec系列函数 system()不用你自己去产生进程,它已经封装了,直接加入自己的命令exec 需要你自己 fork 进程, ...

  3. c语言调用shell命令一 popen使用以及获取命令返回值

    产品升级,新增网卡,原先的产品是arm平台,新网卡是mips平台,需要开发网卡的配置程序,该程序原计划是以守护进程的形式后台执行,不过测试过程中发现系统不是特别稳定,导致程序时不时奔溃下,一时半会儿无 ...

  4. c语言调用cmd命令

    一.介绍 平时在命令行终端的命令除了直接敲也可以通过c语音来输入,方式就是c语音的system函数 二.函数介绍 #include<stdlib.h>int system(const ch ...

  5. Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法

    Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...

  6. 易语言调用微信接口方法(通过wxDriver.dll命令)

    易语言调用微信接口方法(通过wxDriver.dll命令) 先看易语言DLL命令图: DLL命令源码: .版本 2' ***************************************** ...

  7. linux php 执行命令权限不够,PHP调用Linux命令权限不足问题解决方法

    PHP调用Linux命令权限不足问题解决方法 业务背景:  yourcmd为我的linux程序,它对权限要求非常严格,当用php去执行yourcmd程序 系统:CentOS 6.3 apache是ph ...

  8. 从Ruby调用Shell命令

    如何从Ruby程序内部调用Shell命令? 然后如何将这些命令的输出返回到Ruby? #1楼 上面的答案已经很不错了,但是我真的很想分享以下摘要文章:" 在Ruby中运行Shell命令的6种 ...

  9. python调用shell命令-用Python调用Shell命令

    Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如 ...

最新文章

  1. 电子计算机是一种精准的仪器,常见的八种无损检测仪器
  2. 【机器视觉】 HDevelop语言基础(三)-容器和保留字
  3. HTML变列自适应布局三行,CSS三行三列DIV高度自适应的设置
  4. Eclipse 内置浏览器
  5. 得推分类信息 v4.0 强大且好用的网站信息编辑管理工具
  6. 原型和原型链原型继承_原型还是不原型:这就是问题所在。
  7. bzoj1008: [HNOI2008]越狱
  8. leetcode 130 python
  9. Python机器学习:线型回归法06最好的衡量线型回归法的指标RSquared
  10. (91)如何网表文件?
  11. 高中会考access数据库_Access操作会考复习.doc
  12. 纳什叫上林书豪,投了一家AI篮球训练公司
  13. ObjectDataProvider
  14. 寒假作业2:币值转换
  15. 从DCF到DCX:构想照进现实
  16. Hands-on Lab of Azure
  17. sencha touch总结
  18. 计算机专业笔记本显卡,笔记本显卡排名图及显卡等级分类【图文】
  19. 涨知识了!这9个鲜为人知的 Python 第三方库真棒!
  20. 什么是接口,面向接口编程的好处是什么?

热门文章

  1. k8s 使用 yaml 进行服务编排
  2. rcp(插件开发) 如果强制关闭对话框向导(Wizard)-貌似是第一个贴出解决办法的!
  3. 自动生成文件夹目录结构文档
  4. Excel2016 逗号分隔一段数据
  5. Linux系统中修改用户名的两种方案整理
  6. python8-罗马数字转换
  7. RocketMQ 搭建
  8. 二维数组应用之tic-tac-toe游戏胜负判断
  9. 老鹰---Eagle
  10. android App应用实现评分功能