В качестве отправной точки вам нужно указать, на каком языке вы хотите это обнаружение.
Если вы укажете «Я хочу одну программу, которая может работать на любом компьютере и идентифицирует ее», то забудьте об этом - это не будет работать. Ни один программный файл не может работать на любом компьютере - не говоря уже о его идентификации. Одним из вариантов будет «использовать программу, о которой уже известно, что она находится в системе», но ни одна такая программа не является универсально доступной.
Wrt. языки программирования, у вас есть выбор между «сценариями» и «скомпилированными» (возможно, между «скомпилированным байтовым кодом»). В языках сценариев вам нужно выбрать тот, где переводчик уже находится в системе, или где вы можете согласиться с тем, что пользователь устанавливает переводчик перед запуском вашего сценария. Вот почему сценарии оболочки Unix так широко используются для идентификации системы. Они, конечно, ограничены системами, которые обеспечивают /bin/sh
.
Для скомпилированных языков у вас есть выбор между идентификацией системы во время компиляции и во время выполнения. Время компиляции действительно распространено в C, и у различных компиляторов есть предопределенные макросы, которые вы можете использовать для идентификации компилятора, или операционной системы, или микропроцессора.
Для выполнения вам нужны системные вызовы / функции библиотеки, которые вы можете использовать. Какие из них вы можете использовать, зависит от языка программирования.