ÎÒû¿´¹ýPHPÔ´Â룬µ«ËüÓÐÎļþ²Ù×÷º¯Êý£¬ÎÒÏëÓ¦¸Ã¿ÉÒÔ°É£¿ÊµÔÚ²»ÐУ¬ÄÇô×ö¸öCGIÀ´ÊµÏÖÒ²¿ÉÒÔ£¬¶øÇÒ¶ÀÁ¢ÐԺã¬ÈÝÒ×ά»¤¡£ÒÔǰÎÒÔÚBCB»·¾³ÏÂ×ö¹ý£¬Ë¼Â·ÈçÏ£º£¨ÆäʵÏ൱ÓÚÆÕͨµÄÎļþ¶Áд²Ù×÷£¬ºÇºÇ£©
Ò»¡¢´ò¿ªÎļþ
//ÏÈÓÃÎļþ·½Ê½´ò¿ªÒ»¸ö´®¿Ú(COM1~~COM4ÖÐÈÎÒ»¸ö)
HANDLE m_hComm = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
È»ºó¾Í¿ÉÒÔÓÃWriteFile()ºÍReadFile()À´¶Ô´®ÐпڽøÐжÁдÁË£¬×îºó¼ÇµÃCloseHandle(m_hComm);°Ñµ±Ç°´ò¿ªµÄ´®ÐпڹرÕŶ¡£
ÓÉÓÚCreateFile()º¯Êý²ÉÓÃFILE_FLAG_OVERLAPPED³£Á¿£¬ÄÇôעÒâÒ»ÏÂWriteFile()ºÍReadFile()º¯ÊýµÄ×îºóÒ»¸ö²ÎÊýÊÇOVERLAPPED½á¹¹µÄ£¬¶ÁдǰÐèÒªÏȳõʼ»¯¸Ã½á¹¹£º
OVERLAPPED m_ov;
m_ov.Offset = 0;
m_ov.OffsetHigh = 0;
m_ov.hEvent = NULL;
ºÃÁË£¬ÉÏÃæÒѾ´ò¿ªCOM2£¬ÄÇô¾Í½øÐмòµ¥¶Áд£º
¶þ¡¢Ð´£º
BOOL bResult = true;
char* m_WriteBuffer;
DWORD BytesSent = 0;
strcpy(m_WriteBuffer, "ÊÔÊÔд½øÈ¥");
bResult = WriteFile(m_hComm, m_WriteBuffer, strlen((char*)m_WriteBuffer), &BytesSent, m_ov);
Èý¡¢¶Á£º
COMSTAT comstat;//¸Ã½á¹¹°üº¬Í¨ÐÅÉ豸µÄ״̬¡£
BOOL bResult = true;
DWORD dwError = 0;
DWORD BytesRead = 0;
unsigned char m_ReadBuff;
//¿ªÊ¼Ñ»·¶Á
for (;;)
{
bResult = ClearCommError(m_hComm, &dwError, &comstat);//¸üÐÂCOMSTAT½á¹¹²¢Çå³ýËùÓдíÎó
if (comstat.cbInQue == 0)
{
break;//Èç¹û¶ÁÍêÁ˾ÍÍ˳öforÑ»·
}
bResult = ReadFile(m_hComm, &ReadBuff, 1, &BytesRead, m_ov);//Ò»´Î¶Áһ룬Èç¹ûϲ»¶£¬ÄãÒ²¿ÉÒÔÒ»´Î¶Ánλ
......
//ÔÚÕâÀï·ÅÈëÄãµÄ´¦ÀíÄ£¿é£¬·´ÕýReadBuffÀïÊÇÄÚÈÝ£¨1룩£¬¿ÉÒԺϲ¢ÆðÀ´......
......
}
ËÄ¡¢¹Øµô
CloseHandle(m_hComm);
ÒÔÉÏ˼·¿ÉÒÔͨ¹ýº¯Êý·µ»ØÖµ½øÐдíÎó´¦Àí£¬ÖÁÓÚ¸÷´íÎó³£Á¿µÄÒâ˼¿ÉÒÔ²éÊ飬ÍêÕû´¦ÀíÊÇÂé·³µã£¬ÖªµÀ·½·¨¾Í¿ÉÒÔÁË£¬Ö»ÒªÄãÊǼòµ¥Ó¦Óã¬ÄÇô¼òµ¥¶Áд¾Í×ã¹»ÁË¡£Õâ¸öÎļþ¶Áд·½Ê½»¹ÊÊÓÃÓÚ´òÓ¡¿ÚLPT1¡¢LPT2~~~LPTn¡£ÔÚUnixÏÂÎÒûÊÔ¹ý£¬µ«¼ÈÈ»UnixÀàµÄ²Ù×÷ϵͳ±ÈWindows¸ü¼ÓÇ¿µ÷É豸Îļþ£¬ÏàÐÅÔÚUnix¡¢LinuxÏÂÓÃÎļþ·½Ê½¶ÁдCOM¿Ú¸ü¼òµ¥¸üͨÓðɡ£¡£¡££¿»¹ÊÇÕâ¾ä£ºÖªµÀ·½·¨¾ÍÐС£¸Ã³öÊÖʱ¾Í³öÊÖ¡£^_^
²»¹ýÈç¹ûÔÚUnix¡¢LinuxÏÂ×÷ΪCGIÀ