- declarations for entries in signal table
void (*signal (int sig, void (*disp)(int)))(int);
void (* () (int));
- Question Are signals queued up?
- signalsQueued.c
#include
#include
void onintr(int);
int countSigs = 0;
main(int argc, char **argv) {
sigset_t sigset, oldset, newset;
int pid;
struct sigaction act, oact;
int i;
int numSignals;
if(argc != 2) fatal("Usage sigtest num");
numSignals = atoi(argv[1]);
act.sa_handler = onintr;
sigaction(SIGUSR1, &act, NULL);
if((pid = fork()) < 0) fatal("Fork failed");
else if (pid == 0) {
for(i=0; i < 100; ++i){
sleep(1);
printf("Finished sleeping\n");
}
}else{
for(i=numSignals; i > 0; --i){
if(kill(pid, SIGUSR1)< 0) fatal("Kill failed");
}
wait(NULL);
}
}
void
onintr(int sig) {
fprintf(stderr,"Sig %d Caught %d times\n", sig, ++countSigs);
}
fatal(char *s) {
fprintf(stderr,"ERROR %s\n", s);
exit(1);
}
- Signal Macros
#define SIG_ERR ((void (*)())(-1))
#define SIG_DFL ((void (*)())( 0))
#define SIG_IGN ((void (*)())( 1))
-
signal(SIGCHLD, fireman); /* this eliminates zombies */
.....
/* as children die we should get catch their returns
* or else we get zombies, A Bad Thing.
* fireman() catches falling children.
*/
void fireman (int sig){
int wstatus;
int pid;
while ((pid=waitpid(0,&wstatus, WNOHANG)) >= 0)
fprintf(stderr,"SIGCHLD child %d returned %d\n",pid, WEXITSTATUS(wstatus
));
}
- Signal sets
- int sigemptyset(sigset_t *set)
- int sigfillset(sigset_t *set)
- int sigaddset(sigset_t *set)
- int sigdelset(sigset_t *set)
- int sigismember(sigset_t *set)
- Possible macro definitions
#define sigemptyset(ptr) (*(ptr) = 0)
#define sigfillset(ptr) (*(ptr) = ~(sigset_t)0, 0)
/* Note comma operator above */
- int sigprocmask(int cmd, const sigset_t *set, sigset_t *oset)
SIG_SETMASK
SIG_BLOCK
SIG_UNBLOCK
- int sigpending(sigset_t *set)
- struct sigaction - more than just a function
struct sigaction {
void (*sa_handler) __(()); /* signal handler, or action value */
sigset_t sa_mask; /* signals to block while in handler */
int sa_flags; /* signal action flags */
int sa_signo; /* signal number */
};
- sigaction(int sig, struct sigaction *act, struct sigaction *oldact)
- sigsetjmp and siglongjmp save and restore sigmask
- int sigsetjmp(sigjmp_buf env, int savemask);
- void siglongjmp(sigjmp_buf env, int val);
- GUI
- Xerox Park - Macintosh
- W - windowing system at Stanford
- X11
- graphics client-server
- events
- widgets
- Qt
- UIMS - user interface management systems
- Qt introduction
- Qt Documentation Link
- Tutorial
1.Hello, World!
2.Calling it Quits
3.Family Values
4.Let There Be Widgets
5.Building Blocks
6.Building Blocks Galore!
7.One Thing Leads to Another
8.Preparing for Battle
9.With Cannon You Can
10.Smooth as Silk
11.Giving It a Shot
12.Hanging in the Air the Way Bricks Don't
13.Game Over
14.Facing the Wall
- /class/csce510/Qt
- Signal Slots
Oct 25