VirtualBox7.0にUbuntu22.04でTerminalが起動しない問題

立ち上げ時の言語設定に問題があるみたいです。

askubuntu.com

検索すると色々な対処方がありますが、ここではGUIのみで完結する方法を載せておきます。

  1. 右上の電源マークをクリックしSettingsを開く。(画像は言語切り替え済み)
  2. Region & LanguageからLanguageを日本語に変更します。
  3. 再起動を行うとターミナルが立ち上げられるようになります。

最後に、他の方法も記載します。

仮想コンソールを使用する方法

www.wantedly.com

VScodeを使用する方法

it.hirokun.net

inet_ptonについて

inet_ptonについて

inet_ptonは、IPv4/IPv6アドレスの文字列をバイナリ形式へと変更する関数です。

解説するよりコードを書いたほうが早い!

例:文字列をバイナリへと変換する

#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    unsigned char bin_ipv4[sizeof(struct in_addr)];

    inet_pton(AF_INET, "127.0.0.1", &bin_ipv4);

    printf("127.0.0.1\n");
    for (int i = 0; i < 4; i++)
    {
        printf("\t%dバイト目:%d\n", i, bin_ipv4[i]);
    }
    
    unsigned char bin_ipv6[sizeof(struct in6_addr)];
    inet_pton(AF_INET6, "1:2:3:4:5:6:7:8", &bin_ipv6);

    printf("1:2:3:4:5:6:7:8\n");
    for (int i = 0; i < 16; i++)
    {
        printf("\t%dバイト目:%d\n", i, bin_ipv6[i]);
    }
    
    return 0;
}

実行結果は

127.0.0.1
        0バイト目:127
        1バイト目:0
        2バイト目:0
        3バイト目:1
1:2:3:4:5:6:7:8
        0バイト目:0
        1バイト目:1
        2バイト目:0
        3バイト目:2
        4バイト目:0
        5バイト目:3
        6バイト目:0
        7バイト目:4
        8バイト目:0
        9バイト目:5
        10バイト目:0
        11バイト目:6
        12バイト目:0
        13バイト目:7
        14バイト目:0
        15バイト目:8

例:IPv6アドレスの文字列が正しいかを確認する。

#include <arpa/inet.h>
#include <stdio.h>

void check_ipv6_address(const char* addr)
{
    unsigned char bin_ipv6[sizeof(struct in6_addr)];

    printf("%sは", addr);
    if (0 < inet_pton(AF_INET6, addr, &bin_ipv6) )
    {
        printf("IPv6アドレスです。\n");
    }
    else
    {
        printf("IPv6アドレスではありません。\n");
    }
}

int main(int argc, char *argv[]) {
    check_ipv6_address("1:2:3:4:A:B:C:D");
    check_ipv6_address("0001:0002:0003:0004:000A:000B:000C:000D");
    check_ipv6_address("::");
    check_ipv6_address("127.0.0.1");
    check_ipv6_address("1::2::3");
    
    return 0;
}

実行結果は

1:2:3:4:A:B:C:DはIPv6アドレスです。
0001:0002:0003:0004:000A:000B:000C:000DはIPv6アドレスです。
::はIPv6アドレスです。
127.0.0.1はIPv6アドレスではありません。
1::2::3はIPv6アドレスではありません。

例:IPv6アドレスが等しいかを確認する。

#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>

void is_same_ipv6_address(const char* addr1, const char* addr2)
{
    unsigned char bin_addr1[sizeof(struct in6_addr)];
    unsigned char bin_addr2[sizeof(struct in6_addr)];

    inet_pton(AF_INET6, addr1, &bin_addr1);
    inet_pton(AF_INET6, addr2, &bin_addr2);

    printf("%s%sは", addr1, addr2);
    if (0 == memcmp(bin_addr1, bin_addr2, 16) )
    {
        printf("同じアドレスです。\n");
    }
    else
    {
        printf("同じアドレスではありません。\n");
    }
}

int main(int argc, char *argv[]) {

    is_same_ipv6_address("2001:db8:0:0:1:0:0:1", "2001:DB8:0:0:1::1");
    is_same_ipv6_address("2001:db8:0:0:1:0:0:1", "2001:0db8::1:0:0:1");
    is_same_ipv6_address("::", "0:0:0:0:0:0:0:0");
    is_same_ipv6_address("1:2:3:4:5:6:7:8", "9:a:b:c:d:e:f:1");

    return 0;
}

実行結果は

2001:db8:0:0:1:0:0:1と2001:DB8:0:0:1::1は同じアドレスです。
2001:db8:0:0:1:0:0:1と2001:0db8::1:0:0:1は同じアドレスです。
::と0:0:0:0:0:0:0:0は同じアドレスです。
1:2:3:4:5:6:7:8と9:a:b:c:d:e:f:1は同じアドレスではありません。

参考文献