2012-09-05 15 views

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.)

+0

Nie powinny się różnić w zależności od procesora, tylko przez implementację systemu operacyjnego. – Wug

+1

@Wug: Rzeczywiste numery syscall różnią się na x86, x86_64, ARM, PPC, itp. – Nemo

+0

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

Powiązane problemy