Sponsored Content
Top Forums Programming Cannot catch SIGINT while serial break condition occurs Post 302136280 by gzz on Monday 17th of September 2007 02:24:20 AM
Old 09-17-2007
maybe this thread should be moevd to programming forum, but if I started this here I wont start another thread for the same pbroblem.
-------------------------------------------------------------------------------------------------------
What am I missing?
What needs to be added to receive SIGINT from serial driver?

#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#include <unistd.h>
#include <errno.h>
#include <string.h>
void signal_handler_SIGINT (int status); /* definition of signal handler */

main()
{
int fd,c, res;
struct termios options;
char buf[255];
int pid;

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd <0) {perror(MODEMDEVICE); exit(-1); }

signal(SIGINT,signal_handler_SIGINT);

fcntl(fd, F_SETOWN, getpid());
/* Make the file descriptor asynchronous (the manual page says only
O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
fcntl(fd, F_SETFL, FASYNC);

memset (&options, 0x00, sizeof (options));
options.c_cflag |= (CREAD);
options.c_cflag |= CLOCAL;
options.c_cflag |= CS8; // Select 8 l2_data bits
options.c_iflag |= (BRKINT);
// options.c_cc[VMIN] = 1;
options.c_cc[VTIME] = 1;
if(ioctl(fd,TIOCSCTTY, 1) == -1)
printf("eh %s\n",strerror(errno));

}

/***************************************************************************
* signal handler. sets wait_flag to FALSE, to indicate above loop that *
* characters have been received. *
***************************************************************************/

void signal_handler_SIGINT (int status)
{
printf("received SIGINT signal.\n");
exit(0);
}
 

10 More Discussions You Might Find Interesting

1. Programming

Problem with handling SIGINT

For a program I am designing, which involves handling the keyboard input Ctrl^c (SIGINT), it is taking ages for the program to actually recognise and perform the corresponding action whenever I run it and hit Ctrl^C at the CL. I have to do at least 3 Ctrl^Cs before the program will actually... (3 Replies)
Discussion started by: JamesGoh
3 Replies

2. Solaris

Forcing OpenBoot: H/W Solution to no <BREAK> function on USB Serial

Please note: This solution does require some soldering ability. If, like me today, you really really need to get into OpenBoot on a non booting Solaris machine (in my case an Ultra 5) but your USB dongle won't send <BREAK> then here is a -really- simple hardware hack that works a treat: ... (0 Replies)
Discussion started by: HideawayStudio
0 Replies

3. Programming

[C] fgets problem with SIGINT singlal!!!

Hi all, I have this method to read a string from a STDIN: void readLine(char* inputBuffer){ fgets (inputBuffer, MAX_LINE, stdin); fflush(stdin); /* remove '\n' char from string */ if(strlen(inputBuffer) != 0) inputBuffer = '\0'; } All work fine but if i... (1 Reply)
Discussion started by: hurricane86
1 Replies

4. Shell Programming and Scripting

Intercepting SIGINT in a bash script

I've written a bash script which captures video with DVgrab. Because of the nature of the tapes that I am digitizing, sometimes I want to quit capturing before the time that I set for DVgrab. When this is the case I press Ctrl-c and DVgrab exits cleanly, my problem is that there is additional... (5 Replies)
Discussion started by: Starcast
5 Replies

5. Shell Programming and Scripting

How to break a loop if condition is met

I am having trouble figuring this code I want to grep a text from a file and if it match certain text it break out of the loop or it should continue searching for the text Here is what I have written but it isn't working while true f=`grep 'END OF STATUS REPORT' filename` do if ... (9 Replies)
Discussion started by: Issemael
9 Replies

6. Ubuntu

Ubuntu 9.04 Serial application to telnet to serial device

Hello! I am working on an application which reads environmental instruments which have serial ports. The application requires a serial port to be present to talk to the device (i.e. /dev/ttyS0 ). In some instances the environmental devices will be 100's of yards away from the computer, so a... (5 Replies)
Discussion started by: mvona
5 Replies

7. Shell Programming and Scripting

Sh script sends SIGINT to a process

Hello, What I want to accomplish is this: I have made a very simple script that runs 2 commands, polipo proxy and tor. The script runs successfully and the output of tor is visible to the screen. I am using the trap command in order to catch the ctrl+c button combo in order to stop polipo... (5 Replies)
Discussion started by: redsolja
5 Replies

8. UNIX for Dummies Questions & Answers

SIGINT issue

May i know what are the possible causes for SIGINT other than ctrl-c? Thanks (17 Replies)
Discussion started by: pandeesh
17 Replies

9. Shell Programming and Scripting

Always pass SIGINT in ksh

The following command will run and wait for input from the user. /usr/sap/SAP/webdisp/wdispmon pf=/usr/sap/SAP/webdisp/profile What I would like to do is (in one command): - Add the above line to a ksh script - Receive the output - and send a SIGINT I have seen many posts on how to... (3 Replies)
Discussion started by: sapsid
3 Replies

10. Shell Programming and Scripting

Shell script to execute condition until an event occurs

I need a script to keep polling "receive_dir" directory till "stopfile" get written in the directory. This has to run despite empty directory. So far i have this but fails if receive_dir is empty with no files with "unary operator expected". Help !! #!/usr/bin/ksh until do for i... (1 Reply)
Discussion started by: iaav
1 Replies
tcgetsid(3C)															      tcgetsid(3C)

NAME
tcgetsid() - get terminal session ID SYNOPSIS
DESCRIPTION
The function returns the value of the session ID of the foreground process associated with the terminal referenced by fildes. is allowed from a process that is a member of a background process group (see termio(7)). RETURN VALUE
Upon successful completion, returns the value of the session ID of the foreground process associated with the terminal referenced by fildes. Otherwise, returns a value of and sets to indicate the error. ERRORS
If the function fails, it sets (see errno(2)) to one of the following values: [EACCES] The file associated with fildes is the controlling terminal of the calling process; however, there is no foreground process group defined for the controlling terminal. [EBADF] fildes is not a valid file descriptor. [ENOTTY] The file associated with fildes is not the controlling terminal or the calling process does not have a controlling terminal. SEE ALSO
getsid(2), setsid(2), tcgetpgrp(3C), thread_safety(5). tcgetsid(3C)
All times are GMT -4. The time now is 03:21 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy