Less basic use of unveil Consider OpenBSD's nc(1) command: -Network swiss army knife.. many sharp blades. -Blade to use chosen by alphabet soup command line args. if (usetls) { if (Cflag && unveil(Cflag, "r") == -1) err(1, "unveil"); if (unveil(Rflag, "r") == -1) err(1, "unveil"); if (Kflag && unveil(Kflag, "r") == -1) err(1, "unveil"); if (oflag && unveil(oflag, "r") == -1) err(1, "unveil"); } else { if (family == AF_UNIX) { if (unveil(host, "rwc") == -1) err(1, "unveil"); if (uflag && !lflag) { if (unveil(sflag ? sflag : "/tmp", "rwc") == -1) err(1, "unveil"); } } else { if (unveil("/", "") == -1) err(1, "unveil"); } } We have a different unveil for each "blade" of the knife.