C'è syscall che consente chiamate di sistema indirette in Linux. Quali sono le ragioni per usarlo - e perché è meglio della chiamata diretta alla funzione?Quali sono i motivi per utilizzare "syscall" invece di chiamare direttamente la funzione?
8
A
risposta
11
A volte il kernel aggiunge chiamate di sistema e ci vuole un po 'prima che la libreria C le supporti.
O forse si sta compilando su una vecchia distribuzione Linux, ma si vuole eseguire su una più recente.
codice Esempio:
// 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);
Ma, in generale, non v'è alcun vantaggio di utilizzare syscall
se la libreria C nel proprio ambiente di compilazione è quello che vi serve. (Per prima cosa, è ancora meno portabile rispetto all'utilizzo di un'interfaccia specifica per Linux, dal momento che i numeri di chiamata del sistema variano a seconda della CPU.)
Problemi correlati
- 1. Quali sono i motivi di questo risultato di riferimento?
- 2. Quali sono i motivi per lanciare un puntatore void?
- 3. Quali sono i motivi per utilizzare l'attributo id per scopi CSS?
- 4. Quali sono i parametri per la funzione punteggio di sklearn?
- 5. Quali sono i possibili motivi per la corruzione di file binari su dispositivi Android
- 6. Quali sono i vantaggi di definire e chiamare una funzione all'interno di un'altra funzione in R?
- 7. Quali sono i motivi tecnici per evitare di iniettare il contenitore del servizio invece dei singoli servizi?
- 8. Quali sono alcuni motivi per cui jquery .focus() non funziona?
- 9. Buoni motivi per passare i percorsi come stringhe invece di utilizzare DirectoryInfo/FileInfo
- 10. Quali sono tutti i codici funzione per i comandi svn?
- 11. Quali sono i motivi positivi per utilizzare il provider di appartenenza predefinito o uno personalizzato che lo eredita?
- 12. Quali sono i modi per modificare una funzione in R?
- 13. Perché utilizzare 'indirizzo funzione == NULL' invece di 'falso'?
- 14. Quali sono i vantaggi di non utilizzare cPickle per creare una memoria permanente per i dati?
- 15. codice errore (-11): quali sono tutti i possibili motivi per ottenere l'errore "cl_build_program_failure" in OpenCL?
- 16. Quali sono i buoni motivi per scegliere l'invarianza in un'API come Stream.reduce()?
- 17. Quali sono i motivi per cui un sito web "semplice" non sceglie Cloud Based Hosting?
- 18. Motivi per non utilizzare Thread.join()
- 19. Utilizzo di JRuby per chiamare direttamente i metodi Java Android
- 20. Quali sono i vantaggi di utilizzare un iteratore in Java
- 21. Quali sono i motivi validi per utilizzare un MemoryCache su una pianura vecchio dizionario <string, object>
- 22. Quando utilizzare setter e getter di proprietà JavaFX, invece di utilizzare direttamente la proprietà
- 23. Quali sono le letture migliori per iniziare a utilizzare WPF invece di WinForms?
- 24. Chiamare JavaScript direttamente da TypeScript
- 25. Utilizzare una stringa per chiamare la funzione in Python
- 26. Quali registri sono sicuri da utilizzare in una funzione (x86)
- 27. Quali sono i motivi "ricarica!" non sembra funzionare sempre nella console di Rails?
- 28. Quali sono i possibili tipi di dati per la funzione canvas toDataURL()?
- 29. Quali sono i motivi originali di ToString() in Java e .NET?
- 30. Crea syscall in Python
Non devono variare dalla CPU, ma solo dall'implementazione del sistema operativo. – Wug
@Wug: i numeri effettivi di syscall variano su x86, x86_64, ARM, PPC, ecc. – Nemo
Questa sarebbe l'implementazione del sistema operativo. Non dipendono dalla CPU in alcun modo, sono definiti in un'intestazione da qualche parte e compilati nel kernel. – Wug