gpt4 book ai didi

linux - 尝试理解 sys_socketcall 参数

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:56 26 4
gpt4 key购买 nike

谁能解释一下这一行到底是做什么的:

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

好的,调用 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是什么意思?有谁知道该函数如何打开端口?

最佳答案

尽管 Linux 有一个通常称为 socketcall 的系统调用,但 C 库不会公开任何具有该名称的 C 函数。通常应使用标准包装函数,例如 socket()getpeername(),这将最终调用系统调用,但如果由于某种原因需要直接调用系统调用,则可以使用 syscall(SYS_socketcall, call, args) 或使用汇编来完成。

在这种情况下,应用程序或其使用的库(标准 C 库除外)很可能定义了自己的函数,称为 socketcall(),该函数与系统调用无关。您应该检查该函数或其文档以了解它的作用。

关于linux - 尝试理解 sys_socketcall 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com