#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; }