百度门户网站,外国个人主页网站欣赏,教务处网站建设,大连模板网站制作报价文章目录 前言代码仓库需求介绍代码说明文件结构核心片段 拓展总结参考资料作者的话 前言
环境编程代码实例#xff1a;“加/卸载” Zend Framework 2。 代码仓库
yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)Environment-and… 文章目录 前言代码仓库需求介绍代码说明文件结构核心片段 拓展总结参考资料作者的话 前言
环境编程代码实例“加/卸载” Zend Framework 2。 代码仓库
yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)Environment-and-network-programming-examples: 环境和网络编程实例 (gitee.com) 需求介绍
现状已存在旧生产项目系统使用 Zend Framework 2基于 PHP 的 Web MVC 框架简称 ZF2
目标简化 ZF2 的配置
内容
将 ZF2 的供应镜像可执行文件加载到内存并映射/解映射到虚拟设备的一个分区将虚拟设备的文件系统挂/卸载到目录
实现
环境FreeBSD服务器语言C/C程序核心执行 Shell 命令程序使用 UNIX - FreeBSD 的系统调用要求可靠尽可能地考虑并处理错误情况 代码
说明
由于代码篇幅较多在博客中直接粘贴并呈现会显得冗长因此未在博客中放置完整代码只展示核心片段代码。请前往代码仓库查看或获取相关代码注释有详细解析 文件结构
文件夹load_ZF2源文件main.cpp可执行文件main说明文件readme.txt配置文件setupvendor.confZF2 的供应镜像文件ZF2VendorImage.bin因为是生产项目未将该文件开源在代码仓库 核心片段
结构体和全局变量
struct SystemFile // 系统文件
{string file_name; // 文件名称string virtual_dev; // 挂载设备号string mount_dir; // 挂载目录
};// const string g_config_file_path(./setupvendor.conf); // 配置文件路径
const string g_config_file_path(/usr/local/etc/setupvendor.conf); // 配置文件路径
const string g_file_num_key(file_num); // 配置文件中系统文件数量的键
string g_file_num_value(); // 配置文件中系统文件数量的值
int g_file_num_value2 0; // 配置文件中系统文件数量的值2const string g_file_name_key(file_name); // 配置文件中系统文件名称的键
const string g_virtual_dev_key(virtual_dev); // 配置文件中虚拟设备号的键
const string g_mount_dir_key(mount_dir); // 配置文件中挂载目录的键
vectorstruct SystemFile g_system_file_vec{}; // 系统文件向量函数
// 在配置文件的一行字符串【键 值换行符】中依据键获取值
void get_key_value(const string line, const string key, string value)// 获取系统文件数量
void get_system_file_num()// 获取系统文件配置
void get_system_file_config()// 执行命令
// 输入命令参数数组参数数量
// 注意execv需要char*const*参数
void exec_cmd(const char *cmd, char *const arg[], const int arg_size)// 挂载文件系统
void mount_file_system()// 卸载文件系统
void umount_file_system()int main(int argc, char *argv[])执行命令函数
// 执行命令
// 输入命令参数数组参数数量
// 注意execv需要char*const*参数
void exec_cmd(const char *cmd, char *const arg[], const int arg_size)
{for (int i 0; i arg_size; i){cout arg[i] ;}cout endl;pid_t pid fork(); // 进程号if (pid -1){perror(exec_cmd() fork() error);exit(EXIT_FAILURE);}else if (pid 0){execv(cmd, arg);}// pid ! 0int ret -1; // 系统调用返回结果int status 0; // 进程结束状态ret waitpid(pid, status, 0); // 等待子进程结束状态阻塞等待if ((ret -1) || ((WIFEXITED(status)) (WEXITSTATUS(status) ! 0))){perror(exec_cmd() Execute command error);exit(EXIT_FAILURE);}return;
}主函数
int main(int argc, char *argv[])
{// 依据参数判断挂载或卸载文件系统if (argc 3){cerr main() Argument number error endl;exit(EXIT_FAILURE);}if ((argc 2) (((strncmp(argv[1], umount, 6)) ! 0))){cerr main() Invalid argument error endl;exit(EXIT_FAILURE);}get_system_file_num(); // 获取系统文件数量get_system_file_config(); // 获取系统文件配置if ((argc 2) (((strncmp(argv[1], umount, 6)) 0))) // 有2个参数且第二个是umount则卸载文件系统{umount_file_system();return 0;}mount_file_system(); // 默认1个参数挂载文件系统return 0;
}拓展
该份实例实际上是在 UNIX/FreeBSD/Linux 环境使用 C/C 程序执行 Shell 命令的特例版本看懂代码后稍加修改该份实例可以成为通用版本 总结
环境编程代码实例“加/卸载” Zend Framework 2。 参考资料
《UNIX环境高级编程第3版》作者W.Richard StevensStephen A.Rago 作者的话
感谢参考资料的作者/博主作者夜悊版权所有转载请注明出处谢谢~如果文章对你有帮助请点个赞或加个粉丝吧你的支持就是作者的动力~文章在描述时有疑惑的地方请留言定会一一耐心讨论、解答文章在认识上有错误的地方, 敬请批评指正望读者们都能有所收获