Windows+Chromeで「この接続ではプライバシーが保護されません」となる場合の対処

June 21,2017 12:03 AM
Category:[Google Chrome]
Tag:[GoogleChrome]
Permalink

Windows+Chromeで「この接続ではプライバシーが保護されません」となる場合の対処方法について紹介します。

1.問題点

Google ChromeであるSSLなページを開くと「この接続ではプライバシーが保護されません」となる場合」があります。

が、対処方法が分かりません。

ということで、「この接続ではプライバシーが保護されません」となる場合の対処について紹介します。

ここではWindowsの対処方法になります。

2.対処方法1

IEを開き、ツールアイコンをクリックして「インターネットオプション」をクリック。

「詳細設定」タブをクリック。

SSLおよびTLS関連の項目をすべてチェックして「OK」をクリック。

これで冒頭のメッセージが表示されなくなり、正常に接続できるようになる可能性があります。

3.対処方法2

Chromeのアドレスバーに下記を入力。

chrome://net-internals/#hsts

「Delete domain」にドメインを入力して「Delete」をクリック(実行しても画面に変化はありません)。

これでエラーが発生したページを再読み込みすれば、正常に接続できるようになる可能性があります。

4.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

shmgetの"0x1b6"の意味

June 16,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

shmgetの"0x1b6"の意味について調べてみました。

1.はじめに

Linuxには、共有メモリーセグメントを割り当てるshmget()というシステムコールがあります。

shmid = shmget(key, sizeof(pthread_mutex_t), IPC_CREAT | IPC_EXCL | 0x1b6);

こういうサンプルをみかけるのですが、第3パラメータにある"0x1b6"の意味が分かりません。

ということで、shmgetの"0x1b6"の意味について調べてみました。

2."0x1b6"の意味

manコマンドによると、shmgetの第3パラメータはshmflgといい、動作を決めるための各フラグを設定します。

上記のサンプルにある、IPC_CREATとIPC_EXCLの意味は次のとおりです。

IPC_CREAT

新しいセグメントを作成する。このフラグが指定されなかった場合、 shmget() は key に対応するセグメントを探し、 ユーザーがそのセグメントにアクセスする許可があるかどうかをチェックする。

IPC_EXCL

このフラグは IPC_CREAT とともに使用し、 この呼び出しで確実にセグメントが作成されるようにする。 セグメントが既に存在した場合には、 呼び出しは失敗する。

この2つの値はOR条件で組み合わせられます。ちなみに16進数表記の値はそれぞれ下記のとおりです。

  • IPC_CREAT:0x200
  • IPC_EXCL:0x400

manの説明は、次のように続いています。

上記のフラグに加えて、 shmflg の下位 9 ビットは、所有者、グループ、その他への許可を指定する。 これらのビットは open(2) の mode 引き数と同じ形式で同じ意味を持つ。 今のところ、システムは実行 (execute) 許可を参照しない。

「下位 9 ビット」がどうやら"0x1b6"を指すようです。

"0x1b6"を2進数に分解すると、0001 1011 0110になります(下位9bitなので上位3bitの"000"は無視)。

下位9bitを3ビットずつ区切ると、110 110 110になります。

10進数に直すと「666」になり、これでパーミッションの指定を行っているようです。

つまり"0x1b6"は「666」というパーミッションの設定を行っているということですね。

Comments [0] | Trackbacks [0]

C++のクラス変数にstaticにして「~に対する定義されていない参照です」というエラーになる場合の対処

June 15,2017 12:03 AM
Category:[C/C++]
Tag:[C++]
Permalink

C++のクラス変数にstaticにして、「~に対する定義されていない参照です」というエラーになる場合の対処について紹介します。

1.問題点

下記のサンプルを作りました。

このサンプルのポイントは、クラス変数fooをstaticで定義している点です。

sample.h

class Sample {
private:
    int foo;
public:
    Sample(int number);
    void display();
};

sample.cpp

#include <iostream>
#include "sample.h"
 
Sample::Sample(int number) {
    foo = number;
}
void Sample::display() {
    std::cout << foo << std::endl;
}

test.cpp

#include "sample.h"
 
int main() {
    Sample test(100);
    test.display();
    return 0;
}

実行結果

% g++ sample.cpp test.cpp
% ./a.out
100

次に、クラス変数fooをstaticに変更してみます。staticを付与することで、メンバ変数は実体が1つだけになります。

sample.h

class Sample {
private:
    static int foo;
public:
    Sample(int number);
    void display();
};

このサンプルをコンパイルすると、リンケージで下記のエラーが発生します。

% g++ sample.cpp test.cpp
/tmp/ccFBFNh2.o: 関数 `Sample::Sample(int)' 内:
sample.cpp:(.text+0x10): `Sample::foo' に対する定義されていない参照です
/tmp/ccFBFNh2.o: 関数 `Sample::display()' 内:
sample.cpp:(.text+0x24): `Sample::foo' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました

クラス変数fooの定義がされていないというエラーのようですが、対処方法が分かりません。

ということで、「~に対する定義されていない参照です」というエラーになる場合の対処について紹介します。

2.原因と対処

原因はエラーメッセージのとおりです。

対処方法は、sample.cppに赤色で示したクラス変数の定義を追加します。

#include <iostream>
#include "sample.h"
 
int Sample::foo;
 
Sample::Sample(int number) {
    foo = number;
}
void Sample::display() {
    std::cout << foo << std::endl;
}

これで正常にコンパイルが完了します。

実行結果

% g++ sample.cpp test.cpp
% ./a.out
100
Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages