我有一个要求。我的嵌入式系统由程序组成,程序在启动时查找一个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);

10-07 22:55