GNU/Linux >> Znalost Linux >  >> Linux

Uživatelsky definované hodnoty rozsahu chyb (POSIX nebo specifické pro Linux)

Skutečné errno hodnoty nejsou definovány standardy C a C++. Neexistuje tedy žádný způsob, jak vrátit konkrétní (kladné) celé číslo a zaručit, že nebude v rozporu s tím, které implementace používá. Standard C vyžaduje pouze tři značky:

Koncept C11, chyby 7.5

Makra jsou

EDOM
EILSEQ
ERANGE

které se rozšiřují na celočíselné konstantní výrazy s typem int, odlišnými kladnými hodnotami a které jsou vhodné pro použití v #if preprocessingdirectives;

Takže nevíte, jaké další errno hodnoty jsou definovány ve vaší implementaci.

errno hodnoty jsou kladná celá čísla ve standardním jazyce C a POSIX. Takže můžete použít svůj vlastní výčet se zápornými hodnotami k definování vlastních čísel chyb. Ale pak nemůžete použít rozhraní strerror/perror. K interpretaci vlastních čísel chyb tedy možná budete potřebovat další obal pro strerror/perror.

Něco jako:

enum myErrors{
ERR1 = -1,
ERR2 = -2,
...
ERR64 = -64
};

char *my_strerror(int e)
{
   if (e>=ERR1 && e<=ERR2)
      return decode_myerror(e); // decode_myerror can have a map for  
                                //your error numbers and return string representing 'e'.
   else
      return strerror(e);
}

a podobný pro perror .

Všimněte si, že byste také měli nastavit errno na 0 než zavoláte svůj "open-resource", abyste se ujistili, že errno byl skutečně nastaven vaší funkcí.

V takových situacích bych se úplně vyhnul standardnímu errno a definoval bych svůj vlastní výčet chyb. Můžete to udělat, pokud váš „otevřený zdroj“ není příliš komplikovaný a vrací příliš možné chybové kódy.


Linux
  1. Co přesně je Posix?

  2. Zkontrolujte, zda je $reply v rozsahu čísel?

  3. Provést příkaz v definovaném rozsahu adresářů?

  1. Odstranit duplicitní hodnoty v poli?

  2. Přidávat seznam hodnot do Bash skriptu?

  3. Který Bash se provádí?

  1. Co znamená POSIX?

  2. Oddělená vs. připojitelná vlákna POSIX

  3. hledání jedinečných hodnot v datovém souboru