Тебя чем-то не устраивает ассемблер? Извини, так уж устроен Linux и C, что syscall без ассемблера никак.
i Уведомление от модератора sash-kan отрезано от лили ли лиnux?
Модератор: Модераторы разделов
Тебя чем-то не устраивает ассемблер? Извини, так уж устроен Linux и C, что syscall без ассемблера никак.
i Уведомление от модератора sash-kan отрезано от лили ли лиnux?
эээ, гхм, ну я просто предложил попробовать воспользоваться языком низкого уровня для решения нетривиальной задачи при работе с оборудованием (конкретно — трусами)·
ух ты! правда, что ли?QUOTE писал(а):Извини, так уж устроен Linux и C, что syscall без ассемблера никак.
Правда. Функция syscall реализована на ассемблере во всех известных мне реализациях libc.
Вот ты удалил libc, и возможности оператора сузились.
ну, в той же glibc на ассемблере много чего остаётся написанным (и не только для linux-а, но и для всех остальных поддерживаемых ядер):watashiwa_daredeska писал(а): ↑03.08.2012 14:40Правда. Функция syscall реализована на ассемблере во всех известных мне реализациях libc.
да-да, лишь немножко (в случае libc) сузились·
Не потому. Но ежели ты приведешь реализацию syscall на чистом C, без библиотек, то пожалуй соглашусь.
Ну, определение ОС, данное тобой в самом начале обсуждения, выполняется. Или мы уже о чем-то другом говорим?
я приводил выше ссылку на man syscall, где эта функция определена на чистом си·watashiwa_daredeska писал(а): ↑03.08.2012 19:58Не потому. Но ежели ты приведешь реализацию syscall на чистом C, без библиотек, то пожалуй соглашусь.
о майн гад! т.е., к слову «посредник» я должен был добавить ещё и слово «работоспособный»?
Федот, да не тот. По приведённой выше ссылке: объявление (declaration) функции syscall() -- контракт о вызове с набором аргументов (к слову сказать, наличие у компилятора C "перед глазами" объявления функции необязательно, его отсутствие не даст проверить правильность вызова, но не помешает компиляции). А вот реализация её (definition/implementation), как правильно заметили, в файлеsash-kan писал(а): ↑03.08.2012 22:58я приводил выше ссылку на man syscall, где эта функция определена на чистом си·watashiwa_daredeska писал(а): ↑03.08.2012 19:58Не потому. Но ежели ты приведешь реализацию syscall на чистом C, без библиотек, то пожалуй соглашусь.
как раз на ассемблере. Вот о замене той реализации на реализацию на чистом C, без вызовов функций, содержащих ассемблерный/машинный код, и шла речь. Дело в том, что в "языке C" отсутствует возможность вызова прерывания языковыми средствами (ассемблерный int Num), а реализации выполнены специальными функциями, частью языка C не являющимися.
watashiwa_darede... писал(а): ↑03.08.2012 09:47Извини, так уж устроен Linux и C, что syscall без ассемблера никак.
QUOTE писал(а):CPU modes (also called processor modes, CPU states, CPU privilege levels and other names) are operating modes for the central processing unit of some computer architectures
кстати, роясь в исходниках glibc·watashiwa_darede... писал(а): ↑03.08.2012 19:58Но ежели ты приведешь реализацию syscall на чистом C, без библиотек
Код: Выделить всё
$ tail -n 17 glibc-2.9/misc/syscall.c
#include <sysdep.h>
#include <errno.h>
#include <unistd.h>
/* Do system call CALLNO, passing it the remaining arguments.
This only makes sense in certain operating systems. */
long int
syscall (callno)
long int callno;
{
__set_errno (ENOSYS);
return -1;
}
stub_warning (syscall)
#include <stub-tag.h>Повторюсь, суть возражения была в том, что по ссылке функция не "определена", а "объявлена". А вот определена она совсем не на Си.
ну, т.е., условию ваташивы:
она (формально) удовлетворяет·watashiwa_darede... писал(а): ↑03.08.2012 19:58ежели ты приведешь реализацию syscall на чистом C, без библиотек, то пожалуй соглашусь.
финальный штрих: а без ассемблера си вообще никак·watashiwa_darede... писал(а): ↑03.08.2012 09:47Извини, так уж устроен Linux и C, что syscall без ассемблера никак.
Код: Выделить всё
$ cat helloworld.c
main()
{
return 0;
}