c++ - 如何知道我使用的Linux操作系统是否有特定的系统调用?

标签 c++ c linux-kernel network-programming busybox

我正在为繁忙的盒子构建固件应用程序。我的应用程序使用所有与套接字相关的系统调用,但是当我运行程序时,即使服务器端口打开(使用 netstat -nl 检查),客户端也无法连接到服务器。

是否可以检查繁忙框,如果我正在使用的系统调用在操作系统上启用?

更新:连接到服务器套接字的程序在设备 1 上运行,但同一程序在设备 2 上无法运行。 device2有内核更新,这就是我在想是否不支持某些系统调用的原因。

connect 系统调用后给出的错误是 errno - 97。这是不支持的协议(protocol)族。

我发现问题是由下面的代码部分引起的。

ADDRINFOA 提示; PADDRINFOA 结果;

hints.ai_family = AF_INET;

if (getaddrinfo (hostname, NULL, &hints, &result) == 0)

{

memcpy (sockaddr, result->ai_addr, result->ai_addrlen);

freeaddrinfo (result);

}

在 Getaddrinfo 之后,sockaddr.ss_family 为 0。我预计为 2

我在这里做错了什么?有什么帮助吗?

最佳答案

如果您没有以不常见的配置编译内核,则应包含所有网络功能(这意味着应包含与网络相关的系统调用)

发布失败的代码可能是一个想法,已经在评论中指出(遵循@SomeProgrammerDude 的评论)

编辑

系统调用使用固定的注册标识符(内部整数 id)来选择正确的系统调用,这必须与不同的内核和不同的标准库配合使用,这些内核和标准库绑定(bind)我们知道系统调用的标识符名称。如果修改其中任何一个,就会破坏 stdlib 接口(interface)(或内核),因此它们是固定的。即使功能未实现,系统调用入口点也必须工作。通常,在未实际实现的系统调用上,有一个 stub 函数限制在调用时给出错误。

关于c++ - 如何知道我使用的Linux操作系统是否有特定的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49623976/

相关文章:

c++ - C++中noexcept "violations"的静态分析

c++ - CppUnit - 注册多个套件以在单个主要功能中运行

objective-c - 将ansi c导入iphone项目后代码运行非常缓慢

memory-management - 什么是VM_BUG_ON_PAGE(PageLRU(page)|| PageUnevictable(page))?

linux - Linux 设备驱动程序开发书籍/教程/视频讲座

c++ - 结构是非文字类型

c++ - 静态链接相同 SQLite 库的两个项目会导致问题

c - 如何在C中最小化到系统托盘

c - 链表中的全局指针

linux - kprobe 处理程序未针对特定功能触发