小编hen*_*yao的帖子

为什么我们需要SocketOptions.SO_BROADCAST才能启用广播?

如果我们想要从套接字广播信息,我们需要启用SocketOptions.SO_BROADCAST.但是,我不明白为什么这是必要的.

我的理解是我们使用广播地址设置数据包,就像设置单播地址一样.然后我们只需要通过常规套接字发送它.如果是UDP套接字,则将UDP报头添加到该数据包,然后是包含接收者IP地址的IP报头(在这种情况下是广播地址的形式192.168.255.255),然后(FF:FF:FF:FF)添加MAC地址.

我认为路由器将获取数据包并执行广播.我不明白为什么我们需要设置socket属性SO_BROADCAST.

sockets

19
推荐指数
1
解决办法
1万
查看次数

为什么需要在类之外定义静态数据成员?

根据IBM C++知识中心的静态数据成员:

类的成员列表中的静态数据成员的声明不是定义.您必须在命名空间范围内的类声明之外定义静态成员.

这是为什么?关于内存分配的原理是什么?

c++ static

16
推荐指数
3
解决办法
6899
查看次数

为什么i2cdetect总是在嵌入式Linux上的RTC上提供UU

我想用C代码而不是"hwclock"shell命令从RTC传递读取信息.

但是,当我使用时i2cdetect,它显示0x68(这是我的RTC从站地址)具有状态"UU",这意味着"跳过了探测,因为该地址当前正由驱动程序使用".在我尝试之后i2cget,它的givng"可能会将地址设置为0x68:设备或资源忙".

所以我在想我的Linux内核是否存在一些问题,它会一直强制从我的RTC读取,或者其他一些原因.

谢谢

linux i2c linux-device-driver embedded-linux

7
推荐指数
1
解决办法
2万
查看次数

扭曲逻辑:一个文件中的全局变量引用外部变量,但也由该外部变量引用

fileA.cpp:

#include <iostream>
extern int iA;
extern int iB= iA;
int main()
{
std::cout<<iA<<','<<iB;
}
Run Code Online (Sandbox Code Playgroud)

fileB.cpp

extern int iB;
extern int iA = 2*iB;
Run Code Online (Sandbox Code Playgroud)

编译和链接并运行,进入调试和发布模式是0,0 我的问题是它是如何工作的,为什么链接阶段没有问题?我正在使用VC++ 2003.

c++ linker compilation external

6
推荐指数
1
解决办法
667
查看次数

C中全局变量的可见性/范围是什么?

我有两个.c文件:A1.c和A2.c

A1.c如下:

int i=0;
void main()
{}
Run Code Online (Sandbox Code Playgroud)

A2.c如下:

int i=0;
void func()
{}
Run Code Online (Sandbox Code Playgroud)

它编译得很好但是当我尝试链接这两个.o文件时,会出现"i的多重定义"错误.我理解i这里是一个全局变量,但它不需要extern在其他文件中使用关键字.在我的项目中,我没有使用extern.那怎么会出错呢?

c linker global-variables

5
推荐指数
2
解决办法
3063
查看次数

如何确定Qt中QTextEdit中文本的编码?

QTextEdit使用以下代码从对象获取内容:

QString text=my_QTextEdit.toPlainText();
Run Code Online (Sandbox Code Playgroud)

那是什么编码QTextEdit的用途,一个是什么编码在使用QString我从后面toPlainText()通话?

谢谢。

encoding qt

5
推荐指数
1
解决办法
3860
查看次数

'/ dev'中的文件如何与Linux的设备模型匹配?

这是我对开放阅读/写作文件的理解.

在应用程序层,我可以调用该fopen()函数.

fwrite()函数将调用系统调用open().

操作系统收到open()呼叫后,会将命令传递给VFS(虚拟文件系统).

VFS查找文件名,包括所需的任何目录,并进行必要的访问检查.

如果这是在RAM缓存中,则不需要磁盘访问.如果没有,VFS会向特定文件系统发送一个读取请求,该请求可能是EXT4.

然后,EXT4文件系统驱动程序将确定该目录所在的磁盘块.然后它将向磁盘设备驱动程序发送读取命令.


所以现在让我说我想读一个连接到主板的i2c设备A. 文件目录是/ dev/i2c/A.

  • 所有设备都有一个主要编号吗?例如,Linux OS将180设置为USB的主要编号.那么在设备方​​面,每个USB设备中是否有一个主要的数字180?

  • 如果第一个问题的答案为否,那么Linux操作系统如何确定哪种类型的设备A,它只是根据文件目录?

  • 我认为第二个问题的答案可能是:在启动初始化阶段,有一些代码已经使用export()之类的东西将该端口挂载到文件系统?事实上,在启动阶段之后,文件目录/ dev/i2c/A就存在,并且它与i2c设备的主要编号绑定.因此,当我想打开dev/i2c/A时,OS会为我找到合适的i2c驱动程序,而不是SPI或USB驱动程序.我不确定这部分,我需要更多相关信息.

  • 在启动阶段后立即将设备安装到文件系统时会发生上述情况.那么如果我有一个usb会发生什么,在插入后,如何将这个usb安装到具有正确的主号码180的文件系统?我想在安装阶段开始之前插入usb时会有一个irq?

linux-device-driver linux-kernel embedded-linux

3
推荐指数
1
解决办法
6738
查看次数

Linux是否支持多点触摸屏

我想使用QT开发基于arm-linux系统的自己的应用程序。我希望我的应用程序支持多点触控功能。我想知道是否有可能。如果是这样,请让我知道我应该使用哪个版本的Linux内核。

linux multi-touch

3
推荐指数
1
解决办法
1万
查看次数

如果类在VC编译器中包含容器(如std :: map),那么它的内存布局是什么

ClassA{
public:
std::map<int,int> m_map;
...
...
};
Run Code Online (Sandbox Code Playgroud)

我已经/d1reportSingleClassLayout在visual studio中尝试了但是无法真正解码输出:

1> 0 | ?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@ m_map
1>28 | ......
Run Code Online (Sandbox Code Playgroud)

我的理解是容器的大小不固定,所以在ClassA的Obj的内存布局中,应该存在指向堆中实际m_map内容的指针?

c++ containers destructor stl

3
推荐指数
2
解决办法
406
查看次数

如何检查Android中是否真的连接了wifi

我想我的Android设备连接到wifi热点.我创建了一个新的wificonfiguration并将其添加到wifimanager,这wificonfigurationNetworkId.然后我调用该函数wifi.enableNetwork(NetworkId, true).

在那之后,我认为请求者将通过获取IP地址,身份验证,并最终物理连接到热点.那么有没有办法确定wifi是否物理连接?

我更喜欢类似处理程序的方法.

android android-wifi

2
推荐指数
2
解决办法
2万
查看次数