小编Wes*_*ler的帖子

C/C++ Linux,如何在不使用IP的情况下在网络上查找邻居(仅限MAC)

在一个小型网络中,比如20个节点或更少,我的程序在测试仪器上需要知道"谁在那里?" 由MAC而不是IP.我将插入随机网络,并且需要能够在不必知道网络中的任何地址,MAC或其他情况的情况下执行此操作,并且知道我不能依赖DHCP.DHCP服务器可能关闭并且节点没有IP地址和/或我无法获得一个是完全合理的.说实话,我不需要IP,我们的测试协议是MAC层,而不是IP.

那么,我如何确定我的乐器的邻居的MAC地址?这听起来很像LLDP但是倒退,即"谁在那里",而不是"我在这里,我可以做到这一点......".我必须假设没有IP分配给端点,所以没有ARPing,没有NMAP等.

注意我应该补充一点,这是一个有线网络.

c c++ linux macos

11
推荐指数
1
解决办法
1096
查看次数

如何在c中不使用全局变量

我已经读过墙上的文字,避免全球.这导致了一个明显的问题,如何最好地做到这一点?

我显然想用当前的项目来做.目标是让远程PC向已经拥有stdin阅读器的应用程序发送"击键".我们的想法是让现有的代码检测到没有待处理的按键,然后检查是否有"udp按键",如果是,则将其填入所以它似乎是键盘输入.微创,不需要在其他人的代码中改装.

所以我拼凑了一个使用小UDP套接字读写setup()函数打开并绑定端口,那么service()在使用非阻塞循环功能select()一次,没有循环,只是检查是否有任何阅读现在.如果是这样,请从套接字读取数据并对其执行某些操作,否则返回0.

// pseudo c
char c;

setup();
while (1)
{
   c = check_for_keyboard_entry();
   if ( c == 0 )
      c = service();
   handle_keypress( c );
   do_a_bunch_of_other_stuff();
}
Run Code Online (Sandbox Code Playgroud)

显而易见的方法是使用一些全局变量来传输两个函数之间的端口,超时,sockaddr等.但是,你应该使用全局,对吗?

那么在函数之间传递六个或八个变量的首选方法是什么?

如果我要使用静态变量setup(),它们是否可以通过service()例程访问?

我想一个获得malloc-ed并传递的结构会起作用.我应该有一个cleanup()关闭套接字并释放内存.

记住,这是AC问题.没有C++!

c struct global-variables

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

谷歌日志条目是否由互斥锁包装?

使用Google的日志记录库(glog-0.3.2),发送到由互斥锁包装的日志的各个条目是什么?也就是说,其他条目是否可以破坏当前正在保存的条目?

我想这转化为:是glog线程安全吗?

如果记录器设置为回显到控制台以及文件,没有我自己的互斥锁,有没有办法阻止printf/ cout破坏输出LOG()?我怀疑不是,但想知道是否有办法锁定可以包装多个语句的互斥锁.

c++ google-code glog

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

qDebug()用作流和函数有什么区别

我已经看到了一些使用qDebug的Qt代码,就像它一样 printf()

qDebug( format, ... );
Run Code Online (Sandbox Code Playgroud)

大多数情况下,我看到它使用像 std::cout

qDebug() << "one " << var_one;
Run Code Online (Sandbox Code Playgroud)

用法有什么不同,何时使用另一个是正确/更好的?Qt帮助在线以某种方式似乎参考功能版本但从未解释它.

c++ qt qdebug

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

C++ read() - 从套接字到ofstream

是否有一种C/C++方法使用read()从套接字读取数据并使接收缓冲区是文件(ofstream)或类似的自扩展对象(例如)?

编辑: 当我考虑如何读取可能接收10000+字节文件的内容的流套接字时出现了问题.我从来没有像把20000或50000字节(现在足够大)放在堆栈上作为缓冲区,文件可以临时存储,直到我可以插入文件.为什么不直接将其直接流入文件中以加注星标.

就像你可以在std:string里面的char*那样,我想到了类似的东西

read( int fd, outFile.front(), std::npos );  // npos = INT_MAX
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

结束编辑

谢谢.

c c++ sockets

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

找不到CLOCK_MONOTONIC

我正在尝试使用clock_gettime(CLOCK_MONOTONIC,ts)。我包含了time.h,并链接到librt(我认为)。我仍然收到未定义CLOCK_MONOTONIC的错误。(编辑:添加了错误文本)

Symbol 'CLOCK_MONOTONIC' could not be resolved  ...   Semantic Error
Run Code Online (Sandbox Code Playgroud)

Eclipse中的C ++。在myrojname-> properties-> C / C ++ Build-> GCC C ++ Linker->库中,我添加了“ rt”。结果命令行包括-lrt。

我尝试了一个简单得多的草稿程序,并使用g ++ -o mytest mytest.cpp -lrt从命令行进行了编译,并且效果很好。

那么,我想念什么?

eclipse g++

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

将指针传递给VB中的DLL中的extern C函数

我是一名C++(MSVC)作家,VB新手试图协助一位刚刚未完成此任务的专家VB.net作家.

我们希望开发C/C++和VB应用程序,以使用C++编写的带有C外部API函数的DLL.C++程序运行得很好.这是我们遇到困难的VB.

DLL提供了一个extern C功能:

RegisterCallback( void* cbFuncPtr, void* dataPtr );
Run Code Online (Sandbox Code Playgroud)

注1:请参阅下面的注释,了解设计变更以及我们制作的原因.

注2:附加更新作为下面的答案添加.

回调函数有哪个C typedef:

typedef   (void)(* CALL_NACK)(void*);
Run Code Online (Sandbox Code Playgroud)

cbFuncPtr预期是一个函数指针,一些VB函数将被调用为CALL_BACK.它dataPtr是指向具有此C定义的数据结构的指针:

typedef struct 
{
   int      retCode;
   void*    a_C_ptr;
   char     message[500];
}  cbResponse_t;
Run Code Online (Sandbox Code Playgroud)

其中a_C_ptr is an internal pointer in the DLL that the VB can cast tolong`.它唯一地标识DLL中回调的位置,并允许VB函数识别来自相同/不同位置的调用.

我们能够RegisterCallback()很好地从VB 访问和运行该函数.记录显示我们到达那里并且数据被传入.实际数据似乎是问题所在.

在阅读大约一百万个论坛条目时,我们了解到VB不知道什么是指针,VB结构不仅仅是有组织的内存.我们非常确定VB结构的"地址"不是C认为的地址.我们已经多次提到"编组"和"托管数据",但缺乏足够的理解来了解这些信息.

我们应该如何编写VB来为DLL提供其回调函数的执行地址?我们如何编写DLL可以填充的VB结构,就像它对C++一样?

我们可能需要一个DLL函数,其中调用应用程序可以说"C"或"VB"并且DLL处理结构指针的方式不同吗?如果是这样,如何编写C来填充VB结构?

c++ vb.net dll

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

如何让g ++列出所有#included文件的路径

我想让g ++/gcc告诉我非系统的所有路径#include in C++ build.事实证明,这是一个艰难的搜索,因为谷歌通过十种不同的方式解释它.

我想要这些文件名和路径,以便我可以将它们添加到Exuberant CTAGS的搜索路径中.我们有一个庞大的项目,如果我在整个事情上使用ctags,生成标签文件大约需要半个小时,编辑器查找的时间也差不多.

我们使用CMakeLisats进行编译.如果有一个指令我可以粘贴到CMakeLists.txt,这将是额外的精彩.

我真的不需要默认路径和文件名,Johnathan Wakely 在这里提供了一个很好的工具.我认为这几乎涵盖了这是一个交叉编译工作的事实.我也不需要跨系统文件.

c c++ gcc g++ include-path

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

Linux C++如何以编程方式获取LAN上所有适配器的MAC地址

如何在我的(小型)本地网络上使用C或C++ PROGRAM(无命令行)来获取MAC地址(如果它们"免费",我也将获取IP地址).它是一个嵌入式Busybox Linux,所以我需要一个极简主义的答案,希望不需要移植一些库.我没有libnet或libpcap.如果DHCP主机,arp缓存似乎永远不会包含MAC.

c c++ linux mac-address busybox

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

在VIM中,如何在插入模式下配置ctrl-v进入可视块模式?

我的谷歌技能让我失望.我认为这将是一个古老而磨损的问题.

在VIM输入模式下,如何<c-v>识别我是否处于正常模式,即进入视觉块状模式?

我试了一下noremap! <C-v <ESC>:visual block,但这显然不是一套合适的魔术词.

注意:根据@ Explosion的评论建议将"编辑模式"更改为"插入模式".

vim

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

标签 统计

c++ ×7

c ×5

g++ ×2

linux ×2

busybox ×1

dll ×1

eclipse ×1

gcc ×1

global-variables ×1

glog ×1

google-code ×1

include-path ×1

mac-address ×1

macos ×1

qdebug ×1

qt ×1

sockets ×1

struct ×1

vb.net ×1

vim ×1