如何以更好的方式找到Pendrive的山路?

时间:2014-04-22 08:25:51

标签: c linux bash shell embedded-linux

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

另外我面临的另一个问题是当我使用system电话时,我无法将char * path_argv[0]作为system电话的参数传递。我必须做的就是这个

system("/media/sda1/UPGRADE_FILES/BB/UPGRADEBB_File.sh '/media/sda1/UPGRADE_FILES/BB/rootfs.ubifs'");

可以某种方式我可以在不使用execv调用的情况下传递指针,因为我不想创建新进程。

1 个答案:

答案 0 :(得分:2)

您可能希望查看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);