// Copyright 2005 Doi Shigeki // list0701.cpp COMポート送受信プログラム // com4版 #include #include #include main() { HANDLE h; // ファイル・ハンドル h = CreateFile( "COM4", GENERIC_READ | GENERIC_WRITE, 0, // 非共有 0, // セキュリティ属性,使用しない OPEN_EXISTING, // 既存ファイルのオープン 0, 0 ); // 属性,テンプレート if( h == INVALID_HANDLE_VALUE ){ printf("オープン・エラー\n"); return; } DCB dcb; GetCommState( h , &dcb ); // 現在の設定をベースにして設定 dcb.ByteSize = 8; // 8ビット dcb.BaudRate = 9600; // 9600ボー dcb.fOutxCtsFlow = 0; // CTSを送信可に使わない(0)/使う(1) if( ! SetCommState( h , &dcb )){ printf("DCBのエラー\n"); return; } printf( "BaudRate=%d, ByteSize=%d, CTSflow=%d \n", dcb.BaudRate, dcb.ByteSize, dcb.fOutxCtsFlow ); COMMTIMEOUTS cto; //GetCommTimeouts( h, &cto ); // 現在の設定を流用する場合 cto.ReadIntervalTimeout = 10; // タイムアウト0.01秒に設定   cto.ReadTotalTimeoutMultiplier = 0; cto.ReadTotalTimeoutConstant = 10; cto.WriteTotalTimeoutMultiplier = 0; cto.WriteTotalTimeoutConstant = 0; SetCommTimeouts( h, &cto ); // タイムアウトの設定 DWORD nn; char c; // 送信用 char cbuf[10]; // 受信用 while(1){ //printf("*"); // ループの様子をモニタするときには活かす if( kbhit() ){ c = getch(); if( c == 3 ) // Ctrl+Cで終了 break; WriteFile( h, &c, 1, &nn, 0 ); // 1文字送信 } ReadFile( h, cbuf, 1, &nn, 0 ); // 入力がなくとも10msでタイムアウト if( nn == 1 ){ // 入力があった場合 printf("%c", cbuf[ 0 ]); } } CloseHandle( h ); }