ディスク入出力

#include < iostream >
#include < fstream >
using namespace std;

int main(int argc, char *argv[])
{
    if(argc!=2){
        cout << "use: WRITE\n";
        
        return 1;
    }
    ofstream out(argv[1]);
    
    if(!out){
        cout << "cannot open input file\n";
        return 1;
    }
    
    char str[80];
    cout << "write char in disk and stop $\n";
    
    do {
        cout << ": ";
        cin >> str;
        out << str << endl;
    } while (*str != '$');
    
    out.close();
    return 0;
}

独自マニュプレーター

setup()というマニュプレータ

#include < iostream >
using namespace std;

ostream &setup(ostream &stream)
{
    stream.width(10);
    stream.precision(4);
    stream.fill('*');
    
    return stream;
}

int main()
{
    cout << setup << 123.123456;
    
    return 0;
}

抽出子の作成

#include < iostream >
using namespace std;

class coord {
    int x, y;
public:
    coord() { x = 0; y = 0; }
    coord(int i, int j){ x = i; y = j; }
    friend ostream &operator<<(ostream &stream, coord ob);
    friend istream &operator>>(istream &stream, coord &ob);
};

ostream &operator<<(ostream &stream, coord ob)
{
    stream << ob.x << ", " << ob.y << '\n';
    return stream;
}

istream &operator>>(istream &stream, coord &ob)
{
    cout << "input polar: ";
    stream >> ob.x >> ob.y;
    return stream;
}

int main()
{
    coord a(1, 1), b(10, 23);
    
    cout << a << b;
    cin >> a;
    cout << a;
    
    return 0;
}

TCP/IPセキュリティ実験


16年前のTCPやIPの書籍を一読。著者は日立製作所システム開発研究所の寺田真敏さん。日立の方が書く本を読んだのは、それこそ10年ぶりくらい。

P90にポートスキャン実験用のプログラムがcで掲載されていたが、もっと欲しかったなと思いながらも、なかなか興味深かったです。

独自挿入子の作成

#include < iostream >
using namespace std;

class coord {
    int x, y;
public:
    coord() { x = 0; y = 0; }
    coord(int i, int j){ x= i; y = j; }
    friend ostream &operator<<(ostream &stream, coord ob);
};

ostream &operator<<(ostream &stream, coord ob)
{
    stream << ob.x << ", " << ob.y << '\n';
    return stream;
}
int main()
{
    coord a(1, 1), b(10, 23);
    cout << a << b;
    
    return 0;
}

入出力マニュピレーター

#include < iostream >
#include < iomanip >
using namespace std;

int main()
{
    cout << hex << 100 << endl;
    cout << oct << 10 << endl;
    
    cout << setfill('x') << setw(10);
    cout << 100 << " hi " << endl;
    
    return 0;
}

C++入出力

#include < iostream >
#include 
using namespace std;

int main()
{
    double x;
    
    cout.precision(4);
    cout << "         x sqrt(x)    x^2\n\n";
    
    for(x = 2.0; x <= 20.0; x++){
        cout.width(7);
        cout << x << "  ";
        cout.width(7);
        cout << sqrt(x) << " ";
        cout.width(7);
        cout << x*x << '\n';
        
    }
    
    return 0;
}

width(),precision(),fill()

#include < iostream >
using namespace std;

int main()
{
    cout.width(10);
    cout << "hello" << '\n';
    cout.fill('%');
    cout.width(10);
    cout << "hello" << '\n';
    cout.setf(ios::left);
    cout.width(10);
    cout << "hello" << '\n';
    
    
    cout.width(10);
    cout.precision(10);
    cout << 123.234567 << '\n';
    cout.width(10);
    cout.precision(6);
    cout << 123.234567 << '\n';
    return 0;
}

トロイの木馬型ウィルス

Picture.EXE:キャッシュされたユーザー名およびパスワードを含んだ内容のファイルを調べ、電子メールを利用して送信
K2PS.EXE:ダイヤルアップネットワークのパスワードを電子メールを利用して送信
Y2Kcount.exe:WSOCK32.DLLの置き換え、ログイン時のパスワード横取り
BackDoor-G亜種:インストールすると遠隔制御することが可能に
W95.Baylonia:ウィルスプログラムの自動送信および自動アップデート

書式フラグの設定

#include < iostream >
using namespace std;

int main()
{
    cout  << 123.23 << " hello " << 100 << '\n';
    cout << 10 << ' ' << -10 << '\n';
    cout << 100.0 << "\n\n";
    
    cout.unsetf(ios::dec);
    cout.setf(ios::hex | ios::scientific);
    cout << 123.23 << " hello " << 100 << '\n';
    
    cout.setf(ios::dec);
    cout.setf(ios::hex | ios::scientific);
    cout << 123.23 << " hello " << 100 << '\n';
    
    cout.setf(ios::showpos);
    cout << 10 << ' ' << -10 << '\n';
    cout. setf(ios::showpoint | ios::fixed);
    cout << 100.0;
    
    return 0;
}