• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 246
  • Last Modified:

accessing the comports using c

I need help on how to access the com ports in LINUX using C. What I need to do is open and send/recive data from com1 or 2. How do I do this???
1 Solution
On Linux typically com1 is "/dev/ttyS0" and com2 is "/dev/ttyS1". This may change if you have a non-typical hardware setup.
A good example of the basics of accessing and controlling a modem.

 *  AUTHOR: Sven Goldt (goldt@math.tu-berlin.de)
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License
 *  as published by the Free Software Foundation; either version 2
 *  of the License, or (at your option) any later version.
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  GNU General Public License for more details.
 This is like all programs in the Linux Programmer's Guide meant
 as a simple practical demonstration.
 It can be used as a base for a real terminal program.

#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>

#define BAUDRATE B38400
#define MODEMDEVICE "/dev/modem"
#define ENDMINITERM 2 /* ctrl-b to quit miniterm */

#define _POSIX_SOURCE 1 /* POSIX compliant source */

#define FALSE 0
#define TRUE 1

volatile int STOP=FALSE;

void child_handler(int s)

int fd,c;
struct termios oldtio,newtio,oldstdtio,newstdtio;
struct sigaction sa;
  Open modem device for reading and writing and not as controlling tty
  because we don't want to get killed if linenoise sends CTRL-C.
 if (fd <0) {perror(MODEMDEVICE); exit(-1); }
 tcgetattr(fd,&oldtio); /* save current modem settings */
  Set bps rate and hardware flow control and 8n1 (8bit,no parity,1 stopbit).
  Also don't hangup automatically and ignore modem status.
  Finally enable receiving characters.
 newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
 Ignore bytes with parity errors and make terminal raw and dumb.
 newtio.c_iflag = IGNPAR;
 Raw output.
 newtio.c_oflag = 0;
 Don't echo characters because if you connect to a host it or your
 modem will echo characters for you. Don't generate signals.
 newtio.c_lflag = 0;
/* blocking read until 1 char arrives */
/* now clean the modem line and activate the settings for modem */
 tcflush(fd, TCIFLUSH);

  Strange, but if you uncomment this command miniterm will not work
  even if you stop canonical mode for stdout. This is a linux bug.
 tcsetattr(1,TCSANOW,&newtio); /* stdout settings like modem settings */
/* next stop echo and buffering for stdin */
 tcgetattr(0,&newstdtio); /* get working stdtio */
 newstdtio.c_lflag &= ~(ICANON | ECHO);

/* terminal settings done, now handle in/ouput */
 switch (fork())
  case 0: /* child */
   /* user input */
   close(1); /* stdout not needed */
   for (c=getchar(); c!= ENDMINITERM ; c=getchar()) write(fd,&c,1);
   tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */
   tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */
   exit(0); /* will send a SIGCHLD to the parent */
  case -1:
  default: /* parent */
   close(0); /* stdin not needed */
   sa.sa_handler = child_handler;
   sa.sa_flags = 0;
   sigaction(SIGCHLD,&sa,NULL); /* handle dying child */
   while (STOP==FALSE) /* modem input handler */
    read(fd,&c,1); /* modem */
    write(1,&c,1); /* stdout */
   wait(NULL); /* wait for child to die or it will become a zombie */
Here are some more examples for different situations.

Also, if you perform a search (using www.google.com for example) for "linux serial programming" and "howto" you can get additional information about programming serial ports in general.

This old question needs to be finalized -- accept an answer, split points, or get a refund.  For information on your options, please click here-> http:/help/closing.jsp#1 
Post your closing recommendations!  No comment means you don't care.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now