Quello che ho fatto a volte in passato viene utilizzato un tipo di dati più grande, e poi quando si converte al mio tipo più piccolo, immediatamente riconvertire il tipo più grande e verificare che il valore non è cambiato
Ad esempio, dire che utilizzato un int64_t invece, allora si potrebbe avere qualcosa di simile:
int64_t my_pid64;
/* ... parse string value into my_pid64 ... */
pid_t my_pid = (pid_t) my_pid64;
if ((int64_t) my_pid != my_pid64) /* check that value was not out of range of pid_t */
{
/* ... handle error ... */
}
Non c'è grande opzione per il tipo di dati più grande per usare. "long" era il più grande tipo di dati intero primitivo, ma non è più vero su alcuni comuni compilatori/architetture - anche per Linux (vedere i commenti sotto). Nel frattempo, il tipo intmax_t ha un supporto di libreria scadente. Il risultato è che int64_t a volte è più utile nella pratica.
Ma, fondamentalmente le opzioni per un tipo di dati più grande sono probabilmente lunghe, int64_t e intmax_t.
non è 'sizeof' sufficiente per il vostro scopo? (Non sono sicuro del motivo per cui avresti bisogno di questo, però, ti interessa elaborare?) – Mat
'/ proc/sys/kernel/pid_max' definisce il pid massimo, che puoi modificare. –
@KingsIndian, grazie. Intendo il massimo del tipo, non il valore massimo del sistema nella pratica. – pilcrow