Changes

1,112 bytes removed ,  16:55, 12 April 2013
move the code out to a subpage VNC/newns.c
Line 13: Line 13:  
! <code>newns.c</code>
 
! <code>newns.c</code>
 
|-
 
|-
| <syntaxhighlight lang="c">
+
| {{:VNC/newns.c}}
#define _GNU_SOURCE
  −
#include <stdio.h>
  −
#include <stdlib.h>
  −
#include <unistd.h>
  −
#include <string.h>
  −
#include <errno.h>
  −
#include <sys/mount.h>
  −
#include <sys/types.h>
  −
#include <sys/stat.h>
  −
#include <sys/wait.h>
  −
#include <sys/param.h>
  −
#include <sys/mman.h>
  −
#include <fcntl.h>
  −
#include <signal.h>
  −
#include <sched.h>
  −
 
  −
#define STACK_SIZE (8 * 4096)
  −
 
  −
static int ac;
  −
static char **av;
  −
static int ns_exec(void *_arg)
  −
{
  −
int fd;
  −
 
  −
fd = open("newns.log", O_CREAT | O_TRUNC | O_RDWR | O_APPEND, 0600);
  −
if (fd >= 0) {
  −
close(0);
  −
dup2(fd, 1);
  −
dup2(fd, 2);
  −
close(fd);
  −
}
  −
 
  −
setsid();
  −
execvp(av[1], av + 1);
  −
return 1;
  −
}
  −
 
  −
int main(int argc, char **argv)
  −
{
  −
void *stack;
  −
int ret;
  −
pid_t pid;
  −
 
  −
ac = argc;
  −
av = argv;
  −
 
  −
stack = mmap(NULL, STACK_SIZE, PROT_WRITE | PROT_READ,
  −
MAP_PRIVATE | MAP_GROWSDOWN | MAP_ANONYMOUS, -1, 0);
  −
if (stack == MAP_FAILED) {
  −
fprintf(stderr, "Can't map stack %m\n");
  −
exit(1);
  −
}
  −
pid = clone(ns_exec, stack + STACK_SIZE,
  −
CLONE_NEWPID | CLONE_NEWIPC | SIGCHLD, NULL);
  −
if (pid < 0) {
  −
fprintf(stderr, "clone() failed: %m\n");
  −
exit(1);
  −
}
  −
return 0;
  −
}
  −
</syntaxhighlight>
   
|}
 
|}