DOC PREVIEW
FSU COP 5570 - Signal TIO

This preview shows page 1-2-3-4-5-6 out of 18 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 18 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

Today’s topicsSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Today’s topics•Signals and how to control the program behavior in handling signals.•Terminal I/O•Signal–A form of inter-process communication–tells a process that some event occurs•the kill command–“kill –l”–“kill –s INT pid”•Type “ctrl-C” when a program is running•Memory violation, etc•Divided by 0.•A process dies (SIGHUP and SIGCHLD).•a packet arrives•……–Some commonly used signals:•SIGABRT, SIGALRM, SIGCHLD, SIGHUP, SIGINT, SIGUSR1, SIGUSR2, SIGTERM, SIGKILL, SIGSTOP, SIGSEGV, SIGILL•All defined in signal.h•Try ‘man –s 7 signal’ on linprog•Signal–When a process receives a signal, it has the following options: •Block the signal–Do not disturb (no signal until allowed) – kernel delivers the signal only after the signal is unblocked by the process.•Ignore the signal –I see the signal, I won’t do anything.•Perform the default operation–Ignore the signal–exit•Catch the signal (perform the user defined operation).•Catch a signal:–similar to interrupt (software interrupt)–when a process receives a signal:•stop execution•call the signal handler routine•continue–Signal can be received at any point in the program.•Catching a signal is like inserting a signal handler routine call dynamically (at any point of the program).•Controlling the reaction to signals in a program:•Block the signal (sigprocmask)•Ignore the signal (signal, sigaction)•Perform the default operation (do nothing)–Ignore the signal–exit•Catch the signal (perform the user defined operation) (signal, sigaction)•ANSI C signal function:–syntax:•#include <signal.h>•void (*signal(int sig, void (*disp)(int)))(int);–semantic:•sig -- signal (defined in signal.h)•disp: SIG_IGN, SIG_DFL or the address of a signal handler.•Handler may be erased after one invocation.–How to get continuous coverage?–Still have problems – may lose signals–See example1.c (lingprog and program): semantic not well defined•Block/unblock signal: sigprocmask–Manipulate signal sets•#include <signal.h>Int sigemptyset(sigset_t *set);Int sigfillset(sigset_t *set);Int sigaddset(sigset_t *set, int signo);Int sigdelset(sigset_t *set, int signo);Int sigismember(const sigset_t *set, int signo);–Manipulate signal mask of a process•Int sigprocmask(int how, const sigset_t *set, sigset_t *oset);–How: SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK•See example2.c, example2a.c, example3.c•For a critical region where you don’t want certain signal to come, the program will look like:sigprocmask(SIG_BLOCK, &newmask, &oldmask);……. /* critical region */sigprocmask(SIG_SETMASK, &oldmask, NULL);•Sigaction–Supersedes the signal function + signal blocking–#include <signal.h>–Int sigaction(int signo, const struct sigaction * act, struct sigaction *oact)Struct sigaction { void (*sa_handler)(); /* signal handler */ sigset_t sa_mask; /*additional signal to be block */ int sa_flags; /* various options for handling signal */};–See example4.c (noted the program behavior with multiple signals).•Kill:–Send a signal to a process–#include <signal.h>–#include <sys/types.h>–Int kill(pid_t pid, int signo);•Pid > 0, normal•Pid == 0, all processes whose group ID is the current process’s group ID.•Pid <0, all processes whose group ID = |pid|–See example5.c•Alarm in a program#include <unistd.h>Unsigned int alarm(unsigned int seconds)–Arrange to have a signal (SIGALRM) to be delivered to the process in seconds seconds.•Stop running this program in 2 days.–See example6.c for the use of alarm.•Impact of signals on system calls–A system call may return prematurely–See example7.c–How to deal with this problem?•Check the return value of the system call and act accordingly•Terminal I/O:–The semantics of an output operation is relatively simple. Input is rather messy.–Two input modes:•Canonical mode: the default mode, input line by line•Noncanonical mode: input characters are not assembled.–We will focus on noncanonical mode•When do we use it?•What should we expect when using this mode for input?•Example: Which input mode does a regular shell use?•In POSIX.1, all the characteristics of a terminal device that we can examine and change are in a termios structure (termios.h)Struct termios {tcflag_t c_iflag; /* input flag */ tcflag_t c_oflag; /* output flag */ tcflag_t c_cflag; /* control flags */ tcflag_t c_lflag; /* local flags */ cc_t c_cc[NCCS]; /* control characters */}•Functions to get and set the fields in the termios structure–tcgetattr and tcsetattr;–#include <termios.h>–int tcgetattr(int fildes, struct termios *termios_p)–int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p)•optional_actions: TCSANOW, TCSADRAIN, TCSAFLUSH•Turn on the noncanonical mode:–Unset the ICANON flag in c_lflag•Myterm.c_lflag & = ~ICANON–When will a read return using the noncanonical mode for input?•Number of characters(VMIN)•Time (VTIME)•Specified in the c_cc field–c_cc[VMIN] = ???, c_cc[VTIME] = ???–VMIN > 0, VTIME > 0–VMIN = 0, VTIME > 0–VMIN > 0, VTIME = 0–VMIN = 0, VTIME = 0•See example8.c and


View Full Document

FSU COP 5570 - Signal TIO

Download Signal TIO
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Signal TIO and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Signal TIO 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?