xref: /plan9-contrib/sys/src/libc/9sys/procsetname.c (revision c3b0023128940c4042dcb984316e2abe361e0e76)
1*c3b00231SDavid du Colombier #include <u.h>
2*c3b00231SDavid du Colombier #include <libc.h>
3*c3b00231SDavid du Colombier 
4*c3b00231SDavid du Colombier /*
5*c3b00231SDavid du Colombier  * based on libthread's threadsetname, but drags in less library code.
6*c3b00231SDavid du Colombier  * actually just sets the arguments displayed.
7*c3b00231SDavid du Colombier  */
8*c3b00231SDavid du Colombier void
procsetname(char * fmt,...)9*c3b00231SDavid du Colombier procsetname(char *fmt, ...)
10*c3b00231SDavid du Colombier {
11*c3b00231SDavid du Colombier 	int fd;
12*c3b00231SDavid du Colombier 	char *cmdname;
13*c3b00231SDavid du Colombier 	char buf[128];
14*c3b00231SDavid du Colombier 	va_list arg;
15*c3b00231SDavid du Colombier 
16*c3b00231SDavid du Colombier 	va_start(arg, fmt);
17*c3b00231SDavid du Colombier 	cmdname = vsmprint(fmt, arg);
18*c3b00231SDavid du Colombier 	va_end(arg);
19*c3b00231SDavid du Colombier 	if (cmdname == nil)
20*c3b00231SDavid du Colombier 		return;
21*c3b00231SDavid du Colombier 	snprint(buf, sizeof buf, "#p/%d/args", getpid());
22*c3b00231SDavid du Colombier 	if((fd = open(buf, OWRITE)) >= 0){
23*c3b00231SDavid du Colombier 		write(fd, cmdname, strlen(cmdname)+1);
24*c3b00231SDavid du Colombier 		close(fd);
25*c3b00231SDavid du Colombier 	}
26*c3b00231SDavid du Colombier 	free(cmdname);
27*c3b00231SDavid du Colombier }
28