By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,159 Members | 913 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,159 IT Pros & Developers. It's quick & easy.

How to let the process exit if the signal its waiting for doesn't arrive

P: n/a
Hi!

I have a question about how to create a process in such a way that it
would terminate itself if its wated for input for too long.

Here is the story. I have 2 different files, say R.c and S.c, which
have a named pipe between them and send each other signals. R process
starts first, it opens a named pipe and waits for S to connect. S
connects to the pipe, writes something to it and sends the signal to R
indicating that R can read. When R receives a signal from S, it reads
the data, sends the signal back to S that the data was read, and
suspends waiting for another signal from S to read again, and so on.

My question is when R just starts and waits for S to connect, in case S
doesn't connect, so that R would wait indefinitely, is there a way to
set a clock or something in R to terminate after some time, without
affecting the rest of the execution in case S does connect.

Sorry if my explanation is a little all over the place...
I'd really appreciate any help or any ideas.

Thanks a lot
norm4h8

Sep 28 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
In article <11**********************@d34g2000cwd.googlegroups .com>,
no*****@yahoo.com <no*****@yahoo.comwrote:
>I have a question about how to create a process in such a way that it
would terminate itself if its wated for input for too long.
You can't do that using only standard C. Standard C has no library
calls with timeouts, and no library calls that implement alarms.
(Standard C doesn't even require that there be a useful clock
on the system!)

You will need to use an implementation-dependant extension.
Here is the story. I have 2 different files, say R.c and S.c, which
have a named pipe between them and send each other signals.
"named pipes" are beyond the knowledge of C; they are implementation
extensions. The fact that your system has named pipes suggests
strongly that you are using a Unix-like system; in that case,
comp.unix.programmer can probably lead you to an appropriate solution,
if you tell them which platform + OS version you are using.

[off topic]
Many systems implement an OS extension named alarm() .
--
"No one has the right to destroy another person's belief by
demanding empirical evidence." -- Ann Landers
Sep 28 '06 #2

P: n/a
no*****@yahoo.com wrote:
Hi!

I have a question about how to create a process in such a way that it
would terminate itself if its wated for input for too long.

Here is the story. I have 2 different files, say R.c and S.c, which
have a named pipe between them and send each other signals. R process
starts first, it opens a named pipe and waits for S to connect. S
connects to the pipe, writes something to it and sends the signal to R
indicating that R can read. When R receives a signal from S, it reads
the data, sends the signal back to S that the data was read, and
suspends waiting for another signal from S to read again, and so on.

My question is when R just starts and waits for S to connect, in case S
doesn't connect, so that R would wait indefinitely, is there a way to
set a clock or something in R to terminate after some time, without
affecting the rest of the execution in case S does connect.

Sorry if my explanation is a little all over the place...
I'd really appreciate any help or any ideas.

Thanks a lot
norm4h8
U can define somelines in ur S.c which actually waits for a signal from
R.c :
==S.c==
//handler for SIGALRM
void handler_sigalrm(int signo)
{
[...]
printf("\nNo signal from R.c--hence exiting--TIMEOUT");
[...]
}

int urfunc_in_which_pause_is_called()
{
signal(SIGALRM,handler_sigalrm);
[...]
// raise an alarm for N seconds -- if u need N seconds timeout
+ alarm(N) ;
pause();
[...]
}

Sep 29 '06 #3

P: n/a

ar****@gmail.com wrote:
no*****@yahoo.com wrote:
Hi!

I have a question about how to create a process in such a way that it
would terminate itself if its wated for input for too long.

Here is the story. I have 2 different files, say R.c and S.c, which
have a named pipe between them and send each other signals. R process
starts first, it opens a named pipe and waits for S to connect. S
connects to the pipe, writes something to it and sends the signal to R
indicating that R can read. When R receives a signal from S, it reads
the data, sends the signal back to S that the data was read, and
suspends waiting for another signal from S to read again, and so on.

My question is when R just starts and waits for S to connect, in case S
doesn't connect, so that R would wait indefinitely, is there a way to
set a clock or something in R to terminate after some time, without
affecting the rest of the execution in case S does connect.

Sorry if my explanation is a little all over the place...
I'd really appreciate any help or any ideas.

Thanks a lot
norm4h8

U can define somelines in ur S.c which actually waits for a signal from
R.c :
==S.c==
//handler for SIGALRM
void handler_sigalrm(int signo)
{
[...]
printf("\nNo signal from R.c--hence exiting--TIMEOUT");
[...]
}

int urfunc_in_which_pause_is_called()
{
signal(SIGALRM,handler_sigalrm);
[...]
// raise an alarm for N seconds -- if u need N seconds timeout
+ alarm(N) ;
pause();
[...]
}
Solution is completely based on implementation on UNIX(assumed as u are
using something called named pipes)

Sep 29 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.