Por que hostname -h retorna 255

0

"Nenhuma notícia é boa notícia", que, seguindo a convenção normal, deve retornar 0. Por que

hostname -h 

retorna 255, especialmente quando, 255 por convenção, significa "status de saída fora do intervalo"

    
por sthysel 12.02.2014 / 03:39

3 respostas

2

"hostname -h"

não retorna 255 na minha máquina RHEL.

retorna erro 4 que faz sentido

hostname -h
Usage: hostname [-v] {hostname|-F file}      set hostname (from file)
........
echo $?
4

Se você der uma olhada em hostname.c de net-utils, verá claramente que:

static void usage(void)
{
    fprintf(stderr, _("Usage: hostname [-v] {hostname|-F file}      set hostname (from file)\n"));
........
  exit(4); /* E_USAGE */
}

e referência ao uso () aqui no mesmo arquivo:

........
    case '?':
    case 'h':
    default:
        usage();

    };

Então, eu não sei ao certo por que você está comprando 255, na versão MAC você pode ter "1", mas nunca vi "255".

EDIT você está certo, eu apenas olhei para fedora19 e hostname vem do hostname RPM e de fato para o uso eles retornam 255:

void
usage(FILE *stream)
{
        fprintf(stream,
.....
 exit(-1);
}

;

Então, aqui vou tentar explicar sua confusão.

Bem, primeiro fazendo exit (-1) existe um erro de um programador, pelo menos para o ambiente POSIX, já que em tal sistema operacional qualquer coisa que não 0 no status de saída é considerada FAILURE, mas:

E a função exit () encontrada na biblioteca C padrão?

A página de manual informa que “a função exit () causa o encerramento normal do processo e o valor do status & 0377 é devolvido ao pai ”.

Agora, status & 0377?

O que isso significa?

Bem, 0377 é 377 em octal, que é 255 em decimal ou 0xFF em hexadecimal.

#include <stdlib.h>
void exit(int status);

Portanto, se exit tiver um argumento assinado, mas retornar um 0xFF mascarado para seu pai (que é shell), e “-1” é representado como todos em complemento de dois, isso significa apenas que o valor do shell vai ver e, assim, $? vai armazenar = 0xff Lembre-se que 0xff é 255, e isso é muito bonito.

Mesmo se o programador estiver ciente de que todos os usuários obterão é 255 quando ele chama exit (-1), é um mau hábito fazer isso durante a programação no ambiente POSIX. O código acabará por chegar a alguém que irá entender mal o significado do argumento -1 (255) e levantar uma questão como você (OP) fez.

Espero que isso ajude.

    
por 12.02.2014 / 04:11
1

No meu Ubuntu, hostname -h return 255 .

Usando apt-get source hostname para obter sua origem, mergulhando nela, podemos ver que, se usar -h options, o comando hostname retornará -1 , que está fora do intervalo:

void                                                                            
usage(FILE *stream)
{
....
    exit(-1);                                                                   
}

Na função main , linha 501:

case 'h':                                                               
            usage(stdout);                                                      
            break;
    
por 12.02.2014 / 04:20
1

Nas versões posteriores de hostname , versão 3.15, retorna -1 .

usage(FILE *stream)
{
  fprintf(stream,
    "Usage: hostname [-b] {hostname|-F file}         set host name (from file)\n"
...
...
  exit(-1);
}

Isso parece uma situação em que o status é gerenciado como um int assinado, mas, em algum momento, é convertido em um int não assinado.

    
por 12.02.2014 / 04:47

Tags