环境编程代码实例:“加/卸载” Zend Framework 2。
现状:已存在旧生产项目,系统使用 Zend Framework 2(基于 PHP 的 Web MVC 框架,简称 ZF2)
目标:简化 ZF2 的配置
内容:
实现:
结构体和全局变量
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; // 配置文件中系统文件数量的值2
const string g_file_name_key("file_name"); // 配置文件中系统文件名称的键
const string g_virtual_dev_key("virtual_dev"); // 配置文件中虚拟设备号的键
const string g_mount_dir_key("mount_dir"); // 配置文件中挂载目录的键
vector<struct 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 != 0
int 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;
}
环境编程代码实例:“加/卸载” Zend Framework 2。