Istnieje syscall, który umożliwia pośrednie wywołania systemowe w systemie Linux. Jakie są powody, by z niego skorzystać - i dlaczego jest lepszy niż bezpośrednie wezwanie do funkcji?Jakie są powody używania "syscall" zamiast bezpośredniego wywoływania funkcji?
8
A
Odpowiedz
11
Czasami jądro dodaje wywołania systemowe, a biblioteka C potrzebuje trochę czasu, aby je obsłużyć.
A może kompilujesz na starej dystrybucji Linuksa, ale chcesz uruchomić na nowszej.
Przykładowy kod:
// syscall 277 is sync_file_range() on x86_64 Linux. The header
// files lack it on scc-suse10 where we compile, but the
// performance benefits are substantial, so we just call it
// directly. FIXME someday.
#define SYNC_FILE_RANGE_WRITE 2
syscall(277, fd, done, n, SYNC_FILE_RANGE_WRITE);
Ale w ogóle nie ma zaletą korzystania syscall
jeśli biblioteka C w środowisku kompilacji ma to, czego potrzebujesz. (Po pierwsze, jest jeszcze mniej przenośny niż przy użyciu interfejsu specyficznego dla Linuksa, ponieważ numery połączeń systemowych różnią się w zależności od procesora.)
Powiązane problemy
- 1. Jakie są powody używania programów wsadowych DOS w systemie Windows?
- 2. Czy są jakieś powody używania SGML zamiast XML?
- 3. Jakie są zalety bezpośredniego używania TcpClient przez gniazdo?
- 4. Jakie są powody rzucania pustego wskaźnika?
- 5. Jakie są zalety używania zastrzeżenia?
- 6. Jakie są zalety używania `require` w module zamiast u góry?
- 7. Jakie są reguły wywoływania funkcji na literałach liczbowych w JS?
- 8. Jakie są implikacje związane z bezpieczeństwem używania funkcji zwiększania/formatowania?
- 9. Jakie są powody, dla których nie używam JRuby zamiast MRI/YARV?
- 10. W przypadku MFC CArray, jakie są powody używania innego domyślnego typu szablonu?
- 11. Uruchamianie pliku JAR bez bezpośredniego wywoływania `java`
- 12. Powody używania stałych NSString do wyliczenia?
- 13. Jakie są zalety używania Spring Data neo4j zamiast samego używania neo4j?
- 14. Jakie są konsekwencje nie wywoływania libusb_exit()
- 15. Przechowywanie funkcji SYSCALL w tablicy wskaźników funkcji
- 16. Jakie są powody "przeładuj!" nie zawsze działa w konsoli Rails?
- 17. Jakie są najlepsze referencje do używania jQuery?
- 18. Jakie są skutki uboczne używania EmptyWorkingSet?
- 19. Jakie są plusy i minusy używania `select table_name. *`?
- 20. Jakie są wady kierowania JVM zamiast x86?
- 21. Dlaczego używać bloków statycznych zamiast bezpośredniego inicjowania zmiennych instancji?
- 22. Jakie są zasady manipulowania ciągami podczas używania odsunięć (akcentów)?
- 23. Próbując stworzyć Windows 8 syscall funkcji callgate
- 24. Jakie są plusy i minusy używania bazy danych dla IPC do udostępniania danych zamiast przekazywania wiadomości?
- 25. Jakie powody mogą spowodować awarię ShellExecute?
- 26. Jakie są zalety używania Ruby NArray over Array?
- 27. Jakie są zalety Twitter Future w stosunku do Scala Future?
- 28. Jakie są zalety wywoływania nowego w instancji obiektu?
- 29. wywoływania funkcji Cython C Pythonie
- 30. Dlaczego JavaScript nie umożliwia bezpośredniego wywoływania metod na liczbach?
Nie powinny się różnić w zależności od procesora, tylko przez implementację systemu operacyjnego. – Wug
@Wug: Rzeczywiste numery syscall różnią się na x86, x86_64, ARM, PPC, itp. – Nemo
To byłaby implementacja systemu operacyjnego. W żaden sposób nie są zależne od CPU, są zdefiniowane gdzieś w nagłówku i wkompilowane w jądro. – Wug