我正在尝试使用原始套接字构建以太网网络。我不能使用 TCP/IP、UDP 或任何其他协议。
这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行的是 Linux,服务器需要用 C 或 C++ 编写。
我一直在寻找有关如何使用原始套接字的信息,但每个人都总是说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。任何人都可以提供有关如何入门或在哪里可以找到相关教程的任何信息吗?
我有一个字符串表示的整数列表,类似于以下内容:
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)
请让我知道什么是从,以获得最佳的方式L1
来L3
?
我有一些GPS位置记录,我想绘制到地图(例如OpenStreetMap)并将其保存为图像文件.
我正在使用python.我发现osm-gps-map作为候选库来进行可视化,但显然API缺乏一些功能来满足我的所有需求.我需要的是一个库:
我非常想避免被迫从小部件或浏览器窗口手动制作屏幕截图.如果可能的话,我也想避免自己实现必要的投影功能(如此处所示).有没有人知道提供所需功能的库/工具链(如果可能,可供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) 请考虑以下脚本:
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
).如果不存在其他选项,那么哪种方法最优雅地考虑了条的宽度?
在这个答案的评论中,据说使用如下的联合将整数分割成它们的字节将是未定义的行为.在那个地方给出的代码是相似的,虽然与此不相同,请注意我是否更改了代码的未定义行为相关方面.
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
C++ 03
然而
结论
uint8_t[4]
和uint32_t
不是同一类型(我猜,一个严格的混叠的东西)(加上两个都不是POD结构/联合)上面确实是UB?C++ 11
我想知道是否可以将对命名空间中声明的某些函数或对象的访问权限仅限于同一文件中的其他类.例如,
//myheader.h
namespace stuff
{
int repair(firstObj obj);
int doSomethingElse();
privateObj obj;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望只有在此文件中声明的类才能访问该函数doSomethingElse()
和对象obj
.
我可以使用一些关键字来限制访问吗?
任务是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) 我写了一个简单的程序,应该添加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) 我知道我把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 ×4
c++ ×4
python ×4
scope ×2
gps ×1
integer ×1
linux ×1
list ×1
matplotlib ×1
namespaces ×1
privacy ×1
pthreads ×1
public ×1
raw-sockets ×1
sockets ×1
sorting ×1
string ×1
timer ×1
type-punning ×1
unions ×1