Ваше предположение совершенно не соответствует действительности.Значение sizeof(pid_t)
, равное 4, не означает, что для хранения десятичной строки , представляющей число, требуется 4 байта.Типичный 16-разрядный pid, такой как 12345, очевидно, требует 6 байтов для хранения в виде строки, и, если Linux настроен на разрешение более 32768 процессов, он может легко быть длиннее.
Правильный размер буфера дляудерживайте целочисленный тип foo_t
в качестве десятичной строки 3*sizeof(foo_t)+2
.Если хотите, вы можете немного улучшить границы, но я не против потратить несколько байтов на простоту (и очевидную правильность) в источнике.
(Обратите внимание, что я предполагаю 8-битные байты, который требуется POSIX, так как pids - это концепция POSIX. Если вы хотите поддерживать большие байты, вам нужно адаптировать границу, используя CHAR_BIT
.)