Linux x86_64Namespaces#308
setns
Reassocia a thread chamadora a um namespace existente, referenciado por um descritor de arquivo.
Descrição
Complementa `unshare`: em vez de criar um namespace novo, entra em um já existente (tipicamente obtido abrindo um arquivo em `/proc/[pid]/ns/*`). É assim que utilitários como `nsenter(1)` executam um processo dentro do namespace de rede/mount/etc. de outro processo já em execução.
Header:
sched.hman 2Desde o kernel 3.0Assinatura
int setns(int fd, int nstype);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | int | Descritor de arquivo referenciando o namespace alvo (ex.: aberto a partir de /proc/[pid]/ns/net). |
| nstype | int | 0 para aceitar qualquer tipo, ou um CLONE_NEW* específico para exigir que `fd` seja daquele tipo. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdint |
| rsi | argumento 2 | nstypeint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EPERM(1)
- Operação não permitida (falta de privilégio).