Простое решение:
printf("Message: %jd is the child's process id.", (intmax_t)cpid);
Не очень простое, но и не слишком сложное решение: используйте функцию (непереносную) asprintf
:
asprintf(&msg[1], "%jd is the child's process id.", (intmax_t)cpid);
// check if msg[1] is not NULL, handle error if it is
Если на вашей платформе нет asprintf
, вы можете использовать snprintf
:
const size_t MSGLEN = sizeof(" is the child's process id.") + 10; // arbitrary
msg[1] = malloc(MSGLEN);
// handle error if msg[1] == NULL
if (snprintf(msg[1], MSGLEN, "%jd is the child's process id.", (intmax_t)cpid)
> MSGLEN)
// not enough space to hold the PID; unlikely, but possible,
// so handle the error
или определить asprintf
в терминах snprintf
. Это не очень сложно, но вы должны понимать varargs. asprintf
очень полезно иметь, и это должно было быть в стандартной библиотеке C давным-давно.
EDIT : Первоначально я рекомендовал приведение к long
, но это не правильно, поскольку POSIX не гарантирует, что значение pid_t
соответствует long
. Вместо этого используйте intmax_t
(включите <stdint.h>
, чтобы получить доступ к этому типу).