Port série avec C

    #include <stdio.h>

      // Main Win32 API header.
      #include < windows.h >
      
      int main()
      {
          HANDLE hDevID = INVALID_HANDLE_VALUE; // Identifier of the serial port.
                                              // by default fix at -1 (INVALID_HANDLE_VALUE)
          hDevID = CreateFile( // open the serial port
              "\\\\.\\COM3",
              GENERIC_READ | GENERIC_WRITE,
              0,    // Must be opened with exclusive-access.
              NULL, // No security attributes.
              OPEN_EXISTING, // Must use OPEN_EXISTING.
              0,    // Not overlapped I/O.
              NULL  // hTemplate must be NULL for comm devices.
              );
              
          if (hDevID == INVALID_HANDLE_VALUE)
          {    printf("CreateFile() failed\n");
              return -1;
      
          }else
          {
              printf("CreateFile() succeeded\n");
          }
      
      // we can show the port paramters
          DCB dcb; // Structure defining port options.
          memset(&dcb, 0, sizeof(DCB)); // this function puts zero to all the memoris pointed by dcb
                                      // so dcb initialized by all zero
          if (!GetCommState(hDevID, &dcb)) // now dcb is filled by all the port option
          {
              printf("GetCommState() failed\n");
              return -1;
          }
          printf("baud rate = %d\n",dcb.BaudRate);
          printf("Parity = %d\n",dcb.Parity);
          printf("Byte Size = %d\n",dcb.ByteSize);
          printf("Stop Bit = %d\n",dcb.StopBits);
          // ONESTOPBIT    0
          // ONE5STOPBITS    1
          // TWOSTOPBITS    2
          
          // we can change some options for example
          dcb.BaudRate = 9600 ;
          // so we must apply these new parameters
              if (!SetCommState(hDevID, &dcb))
          {
              printf("SetCommState() failed\n");
              return -1;
          }
      // now, we write a series of caracters to the port using command WriteFile
          #define BUFFER_SIZE 256
          char writebuf[BUFFER_SIZE]; // Buffer used to write data.
          strcpy(writebuf, "HELLO");
          // now write  with command WriteFile
          int writtenbytes = 0; // Number of bytes successfully written by WriteFile().
      
          if (WriteFile(hDevID, writebuf, 5 , (LPDWORD)&writtenbytes, NULL))
          {
              if (writtenbytes == 0)
              {
                  printf("WriteFile() timed out\n");
                  return -1;
              }
          }
          else
          {
              printf("WriteFile() failed\n");
              return -1;
          }
          printf("%d bytes were written\n",writtenbytes );
          
      // Now let's read some bytes from the port
          char readbuf; // Buffer used to read data.
          int readbuflen = 0; // Number of bytes to read.
          int readbytes = 0; // Final number of bytes successfully read by all the calls of ReadFile().
          int nbbytes = 0; // Number of bytes successfully read by each call of ReadFile().
          int i;
      //    if we want to read an entire buffer :
      //    memset(readbuf, 0, BUFFER_SIZE); // Fill the buffer of 0 (to erase any previous read data).
          readbuflen = 10; // We expect for examle 10 bytes
          readbytes = 0;
          nbbytes = 0;
          char buffer [255];
      
          // The number of bytes that are sent and we will receive might not be
          // received entirely with a single call of ReadFile() so
          // we need to check the number of bytes received and retry if necessary.
          // This depends on several things, including the serial port timeout options,
          // the internal program of the device,...
          // We might also get a blocking loop depending on these things (note that ReadFile() and WriteFile() block
          // during the time of communication).
          // Here we read byte by byte and we end the loop when we receive a 0 caracter
          i=0;
          do
          {
              if (ReadFile(hDevID, &readbuf, 1, (LPDWORD)&nbbytes, NULL)) // 1 is the number
                                                                          // of bytes that we read
              {
                  if (nbbytes == 0)
                  {
                      printf("ReadFile() timed out\n");
                      return -1;
                  }
              }
              else
              {
                  printf("ReadFile() failed\n");
                  return -1;
              }
      
              readbytes += nbbytes; // here nbbytes is alwayes equal to 1
              printf("%c",readbuf); // print the read caracters on the screen
              buffer[i++]=readbuf; // save the string in a buffer
          } while(readbuf != 10); // read until the a specian caracter arrives
          buffer[i]=0;
          printf("%s",buffer);
      
          //------------------------------------------------------------------------------------------------------
          // Step 6 : Closing the serial port
          //------------------------------------------------------------------------------------------------------
      
          // Close the COM4 serial port.
          if (!CloseHandle(hDevID))
          {
              printf("CloseHandle() failed\n");
              return -1;
          }
      
          return 0;
      
      }