小编moo*_*eep的帖子

Linux 上 C/C++ 中的简单原始套接字服务器

我正在尝试使用原始套接字构建以太网网络。我不能使用 TCP/IP、UDP 或任何其他协议。

这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行的是 Linux,服务器需要用 C 或 C++ 编写。

我一直在寻找有关如何使用原始套接字的信息,但每个人都总是说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。任何人都可以提供有关如何入门或在哪里可以找到相关教程的任何信息吗?

c c++ sockets linux raw-sockets

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

将字符串列表['3','1','2']转换为有序整数列表[1,2,3]

我有一个字符串表示的整数列表,类似于以下内容:

L1 = ['11', '10', '13', '12', 
      '15', '14',  '1',  '3', 
       '2',  '5',  '4',  '7', 
       '6', '9', '8']
Run Code Online (Sandbox Code Playgroud)

我需要使它成为一个整数列表,如:

L2 = [11, 10, 13, 12, 15, 14, 1, 3, 2, 5, 4, 7, 6, 9, 8]
Run Code Online (Sandbox Code Playgroud)

最后我会按如下方式对其进行排序:

L3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # by L2.sort()
Run Code Online (Sandbox Code Playgroud)

请让我知道什么是从,以获得最佳的方式L1L3

python sorting string integer list

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

使用gps标记绘制地图并将此图像保存到文件

我有一些GPS位置记录,我想绘制到地图(例如OpenStreetMap)并将其保存为图像文件.

我正在使用python.我发现osm-gps-map作为候选库来进行可视化,但显然API缺乏一些功能来满足我的所有需求.我需要的是一个库:

  • 将东西绘制到地图中(例如基于OSM的地图),即GPS位置列表.
  • 自动调整视图(比例/位置)以适合所有绘制位置
  • 将此视图保存到图像文件

我非常想避免被迫从小部件或浏览器窗口手动制作屏幕截图.如果可能的话,我也想避免自己实现必要的投影功能(如此处所示).有没有人知道提供所需功能的库/工具链(如果可能,可供Python使用)?

python gps openstreetmap

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

Python:垃圾收集失败了吗?

请考虑以下脚本:

l = [i for i in range(int(1e8))]
l = []
import gc
gc.collect()
# 0
gc.get_referrers(l)
# [{'__builtins__': <module '__builtin__' (built-in)>, 'l': [], '__package__': None, 'i': 99999999, 'gc': <module 'gc' (built-in)>, '__name__': '__main__', '__doc__': None}]
del l
gc.collect()
# 0
Run Code Online (Sandbox Code Playgroud)

关键是,在所有这些步骤之后,我的机器上的这个python进程的内存使用率大约是30%(Python 2.6.5,请求的更多细节?).这是top的输出的摘录:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
5478 moooeeeep 20   0 2397m 2.3g 3428 S    0 29.8   0:09.15 ipython  
Run Code Online (Sandbox Code Playgroud)

RESP.ps aux:

moooeeeep 5478  1.0 29.7 2454720 2413516 pts/2 S+   12:39 …
Run Code Online (Sandbox Code Playgroud)

python garbage-collection

4
推荐指数
3
解决办法
4670
查看次数

在matplotlib条形图中强制零高度的箱子

请考虑以下脚本:

import pylab
counts = [0,0,0,125,56,0,0,0,34,77,123,0,0,0]
pylab.bar(*zip(*enumerate(counts)), align='center')
pylab.show()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到以下图像. 条形图

如您所见,未绘制绘图边缘的0高度分档.但是,我确实希望它们能够被绘制出来.我能做些什么来实现这个目标?

我知道我可以设置轴的x_lim(Axes.set_xlim).如果不存在其他选项,那么哪种方法最优雅地考虑了条的宽度?

python matplotlib

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

union for uint32_t和uint8_t [4]未定义的行为?

这个答案的评论中,据说使用如下的联合将整数分割成它们的字节将是未定义的行为.在那个地方给出的代码是相似的,虽然与此不相同,请注意我是否更改了代码的未定义行为相关方面.

union addr {
 uint8_t addr8[4];
 uint32_t addr32;
};
Run Code Online (Sandbox Code Playgroud)

到目前为止,我认为这将是一个很好的做法,addr = {127, 0, 0, 1};并得到相应 uint32_t的回报.(我承认根据我的系统的字节顺序,这可能产生不同的结果.但问题仍然存在.)

这是未定义的行为吗?如果是这样,为什么?(我不知道C++中的UB是什么意思是访问非活动的联盟成员.)


C99

  • 在这一点上,C99非常接近C++ 03.

C++ 03

  • 在联合中,最多一个数据成员可以在任何时间处于活动状态,也就是说,最多一个数据成员的值可以随时存储在并集中.C++ 03,第9.5(1)节,第162页

然而

  • 如果POD-union包含几个共享一个共同初始序列的POD结构,则允许检查任何POD结构成员的公共初始序列同上.
  • 如果两个POD-struct类型具有相同数量的非静态数据成员,则它们是布局兼容的,并且相应的非静态数据成员(按顺序)具有布局兼容类型 C++ 03,第9.2(14)节,第157页
  • 如果两种类型T1和T2是相同类型,则T1和T2是布局兼容类型.C++ 03,第3.9(11)节,第53页

结论

  • as uint8_t[4]uint32_t不是同一类型(我猜,一个严格的混叠的东西)(加上两个都不是POD结构/联合)上面确实是UB?

C++ 11

  • 请注意,聚合类型不包含联合类型,因为具有联合类型的对象一次只能包含一个成员.C++ 11,脚注46,第42页

c c++ strict-aliasing unions type-punning

4
推荐指数
4
解决办法
3142
查看次数

如何限制访问某些功能或对象到当前文件?

我想知道是否可以将对命名空间中声明的某些函数或对象的访问权限仅限于同一文件中的其他类.例如,

//myheader.h

namespace stuff
{
  int repair(firstObj obj);
  int doSomethingElse();
  privateObj obj;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望只有在此文件中声明的类才能访问该函数doSomethingElse()和对象obj.

我可以使用一些关键字来限制访问吗?

c++ scope privacy namespaces public

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

以特定的时间间隔执行功能

任务是Processfunction()每x(例如x = 10)秒执行一个函数(例如)。

使用下面的代码,我能够Processfunction()每x秒调用一次。

问题:如何处理函数需要10秒钟以上才能完成执行的情况?

一种方法是有一个标志来指示Processfunction()执行结束并在调用之前检查它Processfunction()。有一个更好的方法吗 ?


#include <pthread.h>
#include <unistd.h> // for sleep() and usleep()

void *timerthread(void *timer_parms) {  

  struct itimerspec new_value;
  int max_exp, fd;
  struct timespec now;
  uint64_t exp;
  ssize_t s;

  struct timer_params *p =(struct timer_params*)timer_parms;

  printf("starttimer Start\n");
  /* Create a CLOCK_REALTIME absolute timer with initial
     expiration and interval as specified in command line */
  if (clock_gettime(CLOCK_REALTIME, &now) == -1)
    handle_error("clock_gettime");

  new_value.it_value.tv_sec = now.tv_sec;
  new_value.it_value.tv_nsec = now.tv_nsec + p->tv_nsec; …
Run Code Online (Sandbox Code Playgroud)

c pthreads timer

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

为什么这个简单的程序不打印?

我写了一个简单的程序,应该添加1和53,并返回54.但显然它什么也没做.没有错误,只是没有.

该文件保存为firstEx.c,我编译并运行如下

$ gcc -o firstEx firstEx.c
$ ./firstEx
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了我看不到输出.有人可以帮忙吗?(我对C.完全不熟悉)

这是代码:

#include <stdio.h>

int main()
{ 
  int var1, var2;
  var1 = 1; 
  var2 = 53;
  void add_two_numbers (int var1, int var2);
  return 0;
}

void add_two_numbers (int a, int b) 
{ 
  int c;
  c = a + b; 
  printf ("%d\n", c); 
}
Run Code Online (Sandbox Code Playgroud)

c

4
推荐指数
1
解决办法
105
查看次数

在另一个命名空间内使用`namespace`的范围

我知道我把using指令的范围限制在一个块或一个函数放在里面.然后它将仅适用于该范围.但是如果块是a,namespace它通过相同命名空间的所有块显然适用.那是对的吗?至少,以下示例表明:(http://ideone.com/K8dk7E)

namespace N1
{
    struct Foo{};
}

namespace N2
{
    using namespace N1;
    Foo f;
}

namespace N2
{
    Foo f2;
}

int main()
{
    N2::f2;
}
Run Code Online (Sandbox Code Playgroud)

我本来应该Foo f2给出一个错误,因为Foo应该是未知的.所以我真正的问题是,using对于同一名称空间的所有块,名称空间块中的语句是否有效?

当所有cpp文件被包含在一起编译时会导致问题,因为它会污染其他cpp文件,这些文件不应该包含其他命名空间(放置using指令的那个).因此,实际上它可能会导致不良冲突.

c++ scope using-directives

4
推荐指数
1
解决办法
1650
查看次数