目录

t_shell.h

t_shell.c

效果


t_shell.h

/*   file name:      t_shell.h*  author:         Rong Tao*   create time:    2018.11.14*     */
#ifndef _T_SYS_SHELL_CMD_H_
#define _T_SYS_SHELL_CMD_H_#ifndef _T_SHELL_STRING_MAXLEN_
#define _T_SHELL_STRING_MAXLEN_     1024
#endif #define t_sh_cmd(fmt, ...) _t_execfmt2string_(NULL, fmt, __VA_ARGS__)/***    Execute a format string by shell command*   Author: rongtao*    Time:   2018.11.15**/
int _t_execfmt2string_(char *string, const char *fmt, ...);#endif /*<_T_SYS_SHELL_CMD_H_>*/

t_shell.c

/*   file name:      t_shell.c*  author:         Rong Tao*   create time:    2018.11.15* create time:    2018.11.17*     */#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include <malloc.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <libgen.h> #include "t_shell.h"
#include "t_user.h"#define t_shell_getlogin() getlogin()
#define t_shell_getcwd(buf,size) getcwd(buf,size)#ifndef _T_SHELL_COLOR_RED__
#define _T_SHELL_COLOR_RED__ "\033[31m"
#endif
#ifndef _T_SHELL_COLOR_GREEN__
#define _T_SHELL_COLOR_GREEN__ "\033[32m"
#endif
#ifndef _T_SHELL_COLOR_END__
#define _T_SHELL_COLOR_END__ "\033[0m"
#endifFILE *t_fp_sys_shell;/*** Execute a format string by shell command*   Author: rongtao*    Time:   2018.11.15**/
int _t_execfmt2string_(char *string, const char *fmt, ...)
{if((string = (char*)malloc(_T_SHELL_STRING_MAXLEN_)) == NULL){return -1;}va_list arg;va_start(arg, fmt);vsprintf(string, fmt, arg);va_end(arg);char folder[_T_SHELL_STRING_MAXLEN_];t_shell_getcwd(folder, _T_SHELL_STRING_MAXLEN_);char *user = t_getcurrentusername(NULL);char *grp = t_getcurrentgrpname(NULL);char *shell = t_getcurrentusershell(NULL);fprintf(stdout, "%s[%s@%s-%s %s]%c %s", strcmp(user, "root")==0?_T_SHELL_COLOR_RED__:_T_SHELL_COLOR_GREEN__,user,grp,basename(shell), basename((char*)folder), strcmp(user, "root")==0?'#':'$',_T_SHELL_COLOR_END__);fprintf(stdout, "%s\n", string);system(string);free(string);free(user);free(grp);free(shell);return 0;
}#if 1
int main()
{t_sh_cmd("ls %s; mkdir %s; rm -rf %s", "/home/rongtao", "1a.out", "1a.out");
}
#endif

效果

$ gcc t_shell.c t_user.c
$ ./a.out
$ ls /home/rongtao; mkdir 1a.out; rm -rf 1a.out
clean.sh  文档

实际上的效果

今天发现个好玩的linux注释:

C语言实现可变参数列表的system接口:宏__VA_ARGS__相关推荐

  1. 【C语言】可变参数列表

    文章目录 前言 一.可变参数列表是什么? 二.怎么用可变参数列表 三.对于宏的深度剖析 隐式类型转换 对两个函数的重新认知 总结 前言 可变参数列表,使用起来像是数组,学习过函数栈帧的话可以发现实际上 ...

  2. C语言中可变参数列表

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113526 可 ...

  3. c语言可变参数 printf,c语言 使用可变参数列表实现printf(my_printf)

    //使用可变参数列表实现print("s\t c\n","bit-tech",'w'); #include #include void int_to_char( ...

  4. c语言理解参数,c语言中对可变参数列表的简单理解

    函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...

  5. C语言_函数可变参数列表

    函数可变参数列表的应用和原理 在网上看到各位前辈关于这部分的介绍有些是过于简洁,有些则是过于晦涩,有的代码拿出来甚至在编译器上跑不过去,所以在这里讲一下自己对于可变参数的认识,若有不正确的地方,欢迎各 ...

  6. c语言中的函数可变参数列表相关的三个宏

    在stdarg.h头文件中声明了一个类型va_list和3个与函数可变参数列表有关的宏:va_start.va_arg.va_end. #include<stdarg.h> //包含宏相关 ...

  7. C 语言的可变参数类型 stdarg

    va_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的. 我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h2: #define va ...

  8. java基础(九) 可变参数列表介绍

    一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型-(三个点) 例如: void printArray(Object...) 注意: 每个方法最多只有一个可变参数 ...

  9. c语言 函数多个参数,C语言函数可变参数

    C语言函数可变参数教程 可变参数的函数必须至少有一个强制参数,可选参数的类型可以变化.可选参数的数量由强制参数的值决定,或由用来定义可选参数列表的特殊值决定. 对于每一个强制参数来说,函数头部都会显示 ...

最新文章

  1. MySQL5.5编译安装
  2. Atitit 图像处理的心得与疑惑 attilax总结
  3. 第一次参加数学建模竞赛如何夺取一等奖
  4. nifty ui_Nifty JUnit:在方法和类级别上使用规则
  5. 新版蓝色广告跳转页面代码分享
  6. Spring 笔记(一)概念梳理
  7. python3 copy_Python3 深浅拷贝
  8. 2015-01-13
  9. linux 网络协议栈参数设置,linux 调整tcp/ip协议栈内核参数支持高负载的web
  10. 服务器安装时找不到驱动器,单位有台曙光的A840r-G服务器 由于之前做过RAID 所以在装系统时提前找不到硬盘驱动器...
  11. GDAL源码剖析(四)之命令行程序说明一
  12. Vmware虚拟机linux系统混合模式上网
  13. CMD 控制台中文乱码
  14. 天翼校园客户端拨号服务器无响应,天翼校园客户端问题总结及解决办法
  15. linux操作系统启动盘,轻松制作Linux操作系统启动盘的四种通行方法
  16. swagger常用注解
  17. 开关稳压器设计的PCB布局布线
  18. 苹果IOS 10.0.2屏蔽垃圾短信
  19. 常用git 命令备忘
  20. [Docker]进入容器命令

热门文章

  1. Jmeter(一)http接口添加header和cookie
  2. UVa 1347 旅行
  3. php header()的用法
  4. 可编程模拟IC之考虑[zz]
  5. C++ 中的数学计算函数
  6. html5 input file样式修改,css为input type=file设置自定义样式
  7. android demo 调用,Android中调用C++函数的一个简单Demo
  8. python把字符串3des加密_Python干货之六大密码学编程库
  9. linux kernel基本构成的内容有下列哪些项_Linux内核线程kernel thread详解
  10. 网站数据是怎么存取在mysql_数据是怎么存储在mysql?