I found an alternate way to write a control message  which works for PCSTRACE.  
I suspect in my original post, the control message did not contain the correct 
number of bytes.  For instance,  the difference between the code that failed 
and the code that worked was the former used a sigset_t * as an argument; the 
latter used a long.

Anyways, here is what works (code borrowed from ptrace.c on OpenSolaris):


struct {
long cmd;
union {
long flags;
sigset_t signals;
fltset_t faults;
} arg;
} ctl;
        
size_t size;

ctl.cmd = PCSTRACE;
premptyset(&ctl.arg.signals);
praddset(&ctl.arg.signals, SIGEMT);
size = sizeof (long) + sizeof (sigset_t);

if((err = write(fd, &ctl, size)) != size){
sprintf(msg, "ERROR: Cannot write to /proc/%d/ctl -- wrote only %d bytes\n", p, 
err );
log_message(LOG_FILE, msg);
exit (1);
} else {
sprintf(msg, "SUCCESSFULLY wrote %d bytes to /proc/%d/ctl\n", err, p);
log_message(LOG_FILE, msg);
}
 
 
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to