2013-06-11 2 views
0

Может кто-нибудь объяснить, что эта линия делает именно:пытается понять параметр sys_socketcall

socketcall(7,255); 

Я знаю, что команда открывает порт в системе, но я не понимаю параметр. человек-страница говорит

int socketcall(int call, unsigned long *args); 

DESCRIPTION 
     socketcall() is a common kernel entry point for the socket system calls. call determines which socket function to invoke. args points to a block con- 
     taining the actual arguments, which are passed through to the appropriate call. 

     User programs should call the appropriate functions by their usual names. Only standard library implementors and kernel hackers need to know about 
     socketcall(). 

Ok, вызовите 7 sys_getpeername, но если я взгляну в человеко-странице:

int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 

DESCRIPTION 
     getpeername() returns the address of the peer connected to the socket sockfd, in the buffer pointed to by addr. The addrlen argument should be initial- 
     ized to indicate the amount of space pointed to by addr. On return it contains the actual size of the name returned (in bytes). The name is truncated 
     if the buffer provided is too small. 

     The returned address is truncated if the buffer provided is too small; in this case, addrlen will return a value greater than was supplied to the call. 

Я действительно не понимаю. Для функции требуется 3 параметра. как функция получила параметр? что означает 255? Кто-нибудь знает, как функция открывает порт?

+0

Как раз для фона, вы используете какой-то вариант UNIX вместо Linux? – summea

+1

Нет, я использую debian, fedora или suse. –

+1

'255', как правило, не является допустимым указателем, так что либо a) является неправильной' socketcall() 'справочной страницей для этой конкретной функции, либо b)' 255' является своего рода специальным значением дозорного значения, которое не задокументировано в этом которая заставляет функцию делать что-то другое. – twalberg

ответ

0

Хотя Linux имеет системный вызов, который обычно называется socketcall, библиотека C не предоставляет никакой функции C с этим именем. Обычно должны использоваться стандартные функции обертки, такие как socket() и getpeername(), что приведет к вызову системного вызова, но если по какой-либо причине необходимо вызвать системный вызов напрямую, то это можно сделать с помощью syscall(SYS_socketcall, call, args) или с использованием сборки.

В этом случае приложение или библиотека, которые он использует (кроме стандартной библиотеки C), скорее всего, определили свою собственную функцию, называемую socketcall(), которая не связана с системным вызовом. Вы должны проверить эту функцию или ее документацию, чтобы узнать, что она делает.

Смежные вопросы