[C++] 186 FLTK : SFTP補助アプリ SMBの一部導入

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]

MacとWindows11間のファイル移動に使用していたOpenSSHサーバが突然使えなくなり、復旧もできないのでSMBに変更しました。

mount_smbfsファイルはsbinディレクトリにあり、.bash_profileなどでパスを通しておく必要があります。

Mac-Mac間、Mac-Linux間はこれまで通りSFTPを使います。

OpenSSHサーバについてはWindows11関連のネット情報がほぼ皆無で本当に使えるのかどうか疑問ではあります。

時たまイジるWindows11は本当に使いにくく、Windows Vista、Windows8以来の失敗作という評価が私の中で固まりつつあります。Windows3.1以降では最悪だと思います。大変でしょうが、次世代OSの開発を急いでもらいたいものです。

extern char *dirName;

void conn_cb(Fl_Widget*, void*) {
    string cmd_conn;
    string pc;

    choice_num = choice -> value();
    switch(choice_num){
        case 0:{
            pc = "xxx.local"; // Mac mini Intel
            break;
        }
        case 1:{
            pc = "xxx.local"; // MacBook Air M1
            break;
        }
        case 2:{
            pc = "xxx.local"; // MacBook Intel
            break;
        }
        case 3:{
            pc = "mount_smbfs //[ユーザ名]@192.168.xx.x/share /Users/[ユーザ名]/share"; // WindowsPC
            break;
        }
        case 4:{
            pc = "xxx.local"; // LinuxPC
            break;
        }
    }

    if (choice_num != 3){
        cmd_conn = "sftp " + pc;
    } else {
        cmd_conn = pc;
    }
    cout << "cmd_conn " << cmd_conn << endl;

    conn_input -> value("");
    conn_input -> value(cmd_conn.c_str());

    string cmdConnCopy = "echo '" + cmd_conn + "' | LANG=ja_JP.UTF-8 pbcopy";
    output_line -> insert(cmdConnCopy.c_str());
    output_line -> insert("\n");
    system(cmdConnCopy.c_str());

}

void cmd_cb(Fl_Widget*, void*) {
    string cmd0;
    string cmd1;
    string cmd;

    int onoff_put = put_rbtn->value();
    int onoff_dir = dir_rbtn->value();

    if (choice_num != 3){
        if (onoff_put == 1){
            cmd0 = "put";
        } else {
            cmd0 = "get";
        }
    } else {
        if (onoff_put == 1){
            cmd0 = "cp";
        } else {
            cmd0 = "cp";
        }
    }

    if (onoff_dir == 1){
        cmd1 = "-r";
    } else {
        cmd1 = "";
    }

    const char* fileName = file_input -> value();
    const char* toName = to_input -> value();

    if (choice_num != 3){
        cmd = cmd0 + " " + cmd1 + " \"" + string(fileName) + "\" " + string(toName);
    } else {
        if (onoff_dir == 1){
            cmd = cmd0 + " " + cmd1 + " \"" + string(fileName) + "\" /Users/[ユーザ名]/share/" + dirName;
        } else {
            cmd = cmd0 + " " + cmd1 + " \"" + string(fileName) + "\" /Users/[ユーザ名]/share";
        }
    }
    cout << "cmd " << cmd << endl;

    cmd_input -> value("");
    cmd_input -> value(cmd.c_str());

    string cmdCopy = "echo '" + cmd + "' | LANG=ja_JP.UTF-8 pbcopy";
    output_line -> insert(cmdCopy.c_str());
    output_line -> insert("\n");
    system(cmdCopy.c_str());

}