Home
Search Perl pages
Subjects
By activity
Professions, Sciences, Humanities, Business, ...
User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...
Text Strings
Conversions, tests, processing, manipulation,...
Math
Integer, Floating point, Matrix, Statistics, Boolean, ...
Processing
Algorithms, Memory, Process control, Debugging, ...
Stored Data
Data storage, Integrity, Encryption, Compression, ...
Communications
Networks, protocols, Interprocess, Remote, Client Server, ...
Hard World Timing, Calendar and Clock, Audio, Video, Printer, Controls...
File System
Management, Filtering, File & Directory access, Viewers, ...
|
|
|
You don't actually ``trap'' a control character. Instead, that character
generates a signal, which you then trap. Signals are documented in Signals and chapter 6 of the Camel.
Be warned that very few
C libraries are re-entrant. Therefore, if you attempt
to print() in a handler that got invoked during another stdio
operation your internal structures will likely be in an inconsistent state,
and your program will dump core. You can sometimes avoid this by using
syswrite() instead of print().
Unless you're exceedingly careful, the only safe things to do inside a
signal handler are: set a variable and exit. And in the first case, you
should only set a variable in such a way that malloc() is not
called (eg, by setting a variable that already has a value).
For example:
$Interrupted = 0; # to ensure it has a value
$SIG{INT} = sub {
$Interrupted++;
syswrite(STDERR, "ouch\n", 5);
}
However, because syscalls restart by default, you'll find that if you're in
a ``slow'' call, such as <
FH>, read(), connect(), or wait(), that
the only way to terminate them is by ``longjumping'' out; that is, by
raising an exception. See the time-out handler for a blocking
flock() in Signals or chapter 6 of the Camel.
Source: Perl FAQ: System Interaction Copyright: Copyright (c) 1997 Tom Christiansen and Nathan Torkington. |
Next: How do I modify the shadow password file on a Unix system?
Previous: How do I start a process in the background?
(Corrections, notes, and links courtesy of RocketAware.com)
Up to: Current Process Control
Rapid-Links:
Search | About | Comments | Submit Path: RocketAware > Perl >
perlfaq8/How_do_I_trap_control_characters.htm
RocketAware.com is a service of Mib Software Copyright 2000, Forrest J. Cavalier III. All Rights Reserved. We welcome submissions and comments
|