Usualmente esto se hace como si fuese un archivo cualquiera, sólo que el nombre del archivo es el del puerto. Aunque tentativamente std::ofstream y std::ifstream debiesen funcionar, te recomiendo que mejor emplees el API de Windows para ello. Primero necesitas abrir el archivo con CreateFile, donde el nombre del archivo sería LPT1, LPT2, COM1, etc (con algún IRDA o USB es algo diferente). Luego empleas WriteFile para escribir los bytes que necesites, o ReadFile para leer del puerto. Finalmente, CloseHandle para cerrar el archivo. Sería algo como:
HANDLE hFile;
const TCHAR szLPT[] = _T("LPT1:"); // nota los dos puntos después del nombre
TCHAR pInBuffer[50];
TCHAR pOutBuffer[50];
BOOL bSucceed;
DWORD dwRead;
memset(pInBuffer, 0, 50);
memset(pOutBuffer, 0, 50);
_tcscpy(pOutBuffer, _T("HOLA MUNDO"));
hFile = CreateFile(
szLPT, //nombre del archivo --el puerto
GENERIC_READ | GENERIC_WRITE, //tipo de acceso --lectura/escritura
NULL, //cómo compartir el archivo --no compartir
NULL, //atributos de seguridad --usar los predefinidos
OPEN_EXISTING, //creación del archivo --ya existente (se supone)
NULL, //otros atributos --sólo para archivos, no aplica para el puerto
NULL //plantilla --no usado
);
if (hFile == INVALID_HANDLE_VALUE) {
//error, usar GetLastError para más información
}
bSucceed = ReadFile(hFile, szInBuffer, 50, &dwRead, NULL);
if (!bSucceed) {
// error
}
cout << "Leídos: " << dwRead << " bytes";
cout.flush();
bSucceed = WriteFile(hFile, szOutBuffer, 50, &dwRead, NULL);
if (!bSucceed) {
//error
}
cout << "Escritos: " << dwRead << " bytes";
cout.flush();
CloseHandle(hFile);
Voilá! Esto debería funcionar, con suerte =D
Saludos.