Как установить переменную $? в си программе?
$? - это статус завершения последней программы.
В C соответствует значению, возвращаемому функцией main. Нормальное завершение программы должно возвращать 0, каждая ошибка обычно соответствует своему коду.
Эту переменную сама система устанавливать будет
Будет. Если скажешь. $? - это код возврата последней выполненной команды. Код возврата устанавливается вызовом exit()

man exit в общем.