vielleicht hilft das?

Code:
//--------------------------------------------------------------------------
// daten vom psion 3c über RS232 empfangen
// katze am freitag den 13.7.7
//--------------------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <conio.h> // nur für getch. kein ansi-standard
#include "signal.h"

void sigfunc(int sig)
{
  if(sig == SIGINT)
  {
    printf("Got Ctrl-c.\n");
    // hier muesste noch ein CloseHandle(port) rein
    getch();
    exit(1);
  }
  return;
}

int main(void)
{
  HANDLE port;
  DCB dcb;
  unsigned char c;
  unsigned long dwNum;

  signal(SIGINT,sigfunc);

  port=CreateFile("COM1",
                  GENERIC_READ | GENERIC_WRITE, 
                  0, 
                  NULL, 
                  OPEN_EXISTING, 
                  0, 
                  NULL);       // serielle Schnittstelle oeffnen 

  if(!port){printf("failed to open port!\n");getch();exit(1);}

  if(!GetCommState(port, &dcb)){CloseHandle(port);printf("failed to get port!\n");getch();exit(1);}

  dcb.DCBlength=sizeof(dcb);
  dcb.BaudRate = CBR_38400;    // Datenrate    
  dcb.ByteSize = 8;            // Datenbits 
  dcb.Parity = 0;              // kein Paritätsbit 
  dcb.StopBits =  ONESTOPBIT;  // 1 Stoppbit
  dcb.fBinary = TRUE; 
  dcb.fParity = FALSE;
  dcb.fNull=TRUE; //FALSE;
  dcb.fDtrControl=0;
  dcb.fDsrSensitivity=FALSE;
  dcb.fRtsControl=0;

  //dcb.fRtsControl = 0;         // RTS auf -12 Volt 
  //dcb.fDtrControl = 1;         // DTR auf +12 Volt 

  if(!SetCommState(port, &dcb)){CloseHandle(port);printf("failed to set port!\n");getch();exit(1);}

  printf("listening..\n");

  while(1) // hier fuehrt nur ctrl+c wieder raus
  {
    if(ReadFile(port,&c,1,&dwNum,NULL));
    {
      printf("%c",c);
    }
  }

  CloseHandle(port);           // serielle Schnittstelle schliessen
  return(0);
}
gruesse von der katz