Так что я знаю, что системный вызов (например, open, close, read, write
и т. Д.) Дважды меняет бит режима - от режима пользователя до режима ядра, чтобы обслуживать запрос системного вызова, а затем обратно в пользовательский режим после его завершения.изменяет бит режима при инициализации переменной?
Но если у нас есть, например
int a = open("lol.txt", O_RDONLY);
бит режим будет меняться еще дважды, чтобы служить системный вызов open
, но то, что о том, когда он присваивает его переменной? Предполагая, что необходимо сохранить переменную в памяти, нужно ли нам вернуться к ядру для повторного запроса этого запроса? то есть, бит режима изменяется 2 или 4 раза в вышеуказанной строке?
Возможный дубликат [Что такое вызывающие соглашения для системных вызовов UNIX и Linux на x86-64] (http://stackoverflow.com/questions/2535989/what-are-the-calling-conventions-for-unix- linux-system-calls-on-x86-64) – xmojmr
@xmojmr, если вы прочитаете вопрос, вы поймете, что это не так. – sparta123
Я считаю, что ответ лежит на [ABI] (http://en.wikipedia.org/wiki/Application_binary_interface), и стало бы ясно, если вы воспользуетесь опцией вашего компилятора для генерации выходного файла исходного кода. Ответ: ** нет **, и причина в том, что системный вызов возвращает все, что он должен сделать обратно в пользовательский режим, через регистры и прямую запись в память. Перетасовка с переменными (локальная, глобальная, изменчивая, что угодно ..) полностью выходит за рамки системного вызова. «ABI» указывает, что будет использоваться в качестве каналов ввода-вывода, а локальных переменных нет в списке. – xmojmr