#include <stdio.h>
#include <string.h>
// 1.输入和输出如打印字符, 2.各种字符和数组操作
#define Lengtha 30
#define Lengthb 30
// 容器要大于 存放量,否则溢出
struct myIN
{
char name[Lengtha];
char suzhi[Lengthb];
};
// 定义结构体 名字: myIN 成员: name 和 suzhi ,它们为数组 特征是 中括号,长度为 30
// 作用:变量不用重复定义类型
void kvmlist(void *qstatus,void *qname)
{
// 定义函数,需要给参数才执行
FILE *fp=NULL;
char temp64[64]={0};
char qlist[999]={0};
memcpy(temp64,"virsh list --all",20);
// 定义指针变量 默认为空,类型是文件
// 定义两个数组变量初始为0
// memcpy 替换复制内容
fp=popen(temp64,"r");
fread(qlist, 999,1,fp );
pclose(fp);
printf(" \n %s \n",qlist);
// 由 popen 函数去执行 shell 命令获取虚拟机
// 读取函数: 1.内存块指针; 2.读取每个元素的大小,字节;3.元素个数; 指针文件或流
// pclose 关闭 和 打印
struct myIN dy[3]={
{"rv1126","工程编译主机"},{"win2012","办公windos桌面"},{"www","开发网站"}
};
// 结构体直接传值:数组dy 继承结构体 myIN ,有两个成员,数组两个元素对应成员
//---------- 结构体赋值 -----------#
struct myIN *csp;
csp = &dy;
printf(" csp 结构体取出 dy 数据,结构体赋值。 目前只打印第一个名字:%s \n ", csp[0].name );
// 结构体 -> 含义 重新赋值
// dy[1]->name = "0";
// 如果符号前是指针类型,那么用 -> 否则用 .
//------------------------
for(int i=0;i<3;i++){
printf("列出主机名称: %s 说明: %s\n", dy[i].name,dy[i].suzhi );
}
// dy[i]->name 表示:i 是数数数组角标,结构体数组 第一组成员 中的name 的值
printf("\n \n您需要控制主机:%s 状态为:%s \n 格式:virsh start/shutdown www \n", qname, qstatus);
memcpy(temp64,"virsh ",10);
strcat(temp64,qstatus);
strcat(temp64,qname);
printf("\n 复制字符串的结果为:%s \n",temp64);
system(temp64);
}
qemu_img()
{
char qcow2[99] = {0};
char status[99] = {0};
char qemuml[]={"qemu-img snapshot -"};
FILE *fp=NULL;
char qlist[999];
printf("\n \n #----------- 镜像快照管理 ------------# \n \
请输入管理方式 和镜像 : l 查看 a 恢复 c 创建 d 删除 , 案例: l www.qcow2 \n");
printf("请输入两个参数,用空格隔开: ");
scanf("%s %s", status , qcow2 ); // scanf 方式获取键盘输入
printf("控制状态: %s 主机名称:%s 镜像字符长度: %d \n",status,qcow2 );
// scanf 中的 %s 不能有逗号,否则无法接收完全
strcat(qemuml,status);
memcpy(qcow2,qemuml,strlen(qemuml));
printf("操作的快照指令为:%s \n", qemuml);
// memcpy 替换复制到字符串前面,但是 本身字符被替换
fp=popen(qemuml,"r");
fread(qlist, 999,1,fp );
pclose(fp);
printf(" \n 查看当前镜像下的快照:\n %s \n",qlist);
}
char main(int sl, char *sz[])
// 第一个变量是参数数量,第二个是指针数组,接收输入参数
{
printf("程序本身名字也占一个参数位置 sz[0],总参数: %d\n",sl);
char a[Lengtha];
char b[Lengtha];
char c[Lengtha];
// 数组才能被数组赋值,此处是数组长度。角标是指针数组
memcpy(a,sz[1],Lengthb);
memcpy(b,sz[2],Lengthb);
memcpy(c,sz[3],Lengthb);
// 定义变量 a b c d 为:数组第 1234 个元素的值
printf("输入的第一个参数a : %s\n 输入的第二个参数b : %s \n 第三个参数: %s \n" ,a,b,c);
char qstatus[20];
char qname[20];
memset(qname,' ',2);
memset(qstatus,' ',2);
strcat(qstatus,b);
strcat(qname,c);
printf("传递两个参数: qname: %s ; qstatus: %s \n \n", qname,qstatus);
kvmlist(qstatus,qname);
qemu_img();
return 0;
}