2013-08-27 6 views
-4

«Убедившись, что каждый ребенок, прежде чем закончить, подождите п секунд (где п последняя цифра PID ребенка)»Extract последняя цифра PID ребенка

Пример:

ребенка PID: 5023 // Последняя цифра = 3 Сон (3)

Как я могу извлечь последнюю цифру из PID ??

Спасибо всем!

+2

Вы что-то пробовали? У вас уже есть ПИД, или у вас проблемы с этим, в первую очередь? – ajp15243

ответ

0

Использование modulo

int lastDigit = pid % 10;

Будьте осторожны, если последняя цифра является 0, вы получите проблемы!

+0

Что такое пример проблемы, если последняя цифра равна 0? sleep (0) выглядит нормально. – chux

+0

Нет, он не будет, '0% 10' -' 0'. 'X% 10' всегда определяется, он будет давать только' 0' '9'. –

4

Если PID хранится в переменной x, то последняя цифра может быть найдена как x % 10.

0

Используйте mod 10, чтобы получить значение, например:

int a = 123; 
printf("%d\n", a % 10) 

Выход:

3 

Конечно понадобится ИДП вместо а.

0

PID обычно имеет тип pid_t типа integer, от "sys/types.h". Так как это должно быть , подписанное тип рекомендовать

неподписанный LastDigit = ((без знака) pid)% 10;

Это гарантирует, что ваш мод не сообщит об отрицательных результатах, как в -57% 10 -> -7.

sleep(t) принимает параметр unsigned. Если ваша переменная pid, возьмите отрицательное значение, например -1, sleep(pid % 10), будет спать за длиной раз.

[Редактировать] pid_t является подписанным типом. Переменная A pid_t отрицательна при возврате ошибок из таких функций, как fork(),

+0

pid всегда будет положительным, как из спецификации POSIX. Это, если не относится к группе процессов (что не является целью вопроса). –

+0

@Lucian Enache Я уверен, что вы правы, но спецификации меняются. Я уверен, что 'unsigned' никогда не станет отрицательным, чем спецификации POSIX. – chux

Смежные вопросы