我有一个要求。我的嵌入式系统由程序组成,程序在启动时查找一个pendrive和pendrive中的特定目录。如果找到目录,则认为它是可引导设备。
考虑以下代码:
uint8 Check_BB_rootfs_Availability()
{
uint8 b_flag = 0x00;
dw_PkgAvailFlag |= BB_PKG_AVAIL_MASK;
if(!(system("ls /media1/sda/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media1/sda/UPGRADE_FILES/BB/rootfs.ubifs";
}
else if(!(system("ls /media1/sda1/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media1/sda/UPGRADE_FILES/BB/rootfs.ubifs";
}
else if(!(system("ls /media2/sda/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media2/sda/UPGRADE_FILES/BB/rootfs.ubifs";
}
else if(!(system("ls /media2/sda1/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media2/sda1/UPGRADE_FILES/BB/rootfs.ubifs";
}
else if(!(system("ls /media/sda/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media/sda/UPGRADE_FILES/BB/rootfs.ubifs";
}
else if(!(system("ls /media/sda1/UPGRADE_FILES/BB/")))
{
path_argv[0] = "/media/sda1/UPGRADE_FILES/BB/rootfs.ubifs";
}
else
{
/* Normal Boot */
dw_PkgAvailFlag &= ~(BB_PKG_AVAIL_MASK);
b_flag = 0x01;
}
return b_flag;
}
如果rootfs可用。我调用一个脚本来执行升级。
能不能用更好的方法来代替if..else条件和系统调用。
另外,我面临的另一个问题是当我使用
system
调用时,即我无法将char * path_argv[0]
作为参数传递给system
调用。再一次我要做的是system("/media/sda1/UPGRADE_FILES/BB/UPGRADEBB_File.sh '/media/sda1/UPGRADE_FILES/BB/rootfs.ubifs'");
如果我不想创建新进程,可以不使用
execv
调用通过指针吗。 最佳答案
您可能想看看stat()
系统调用。它允许您测试某个文件或目录的存在。
您可以使用sprintf()
将“打印”成“字符串”。
char cmd[1024] = ""; /* Make sure this buffer is large enough. */
sprintf(cmd, "/media/sda1/UPGRADE_FILES/BB/UPGRADEBB_File.sh '%s'", path_argv[0]);
int result = system(cmd);