小编Mic*_*kis的帖子

发送固定长度的TCP帧

我需要使用TCP通过具有固定非标准MTU(例如,1560)的子网发送一些数据.如果帧的长度小于MTU,则通过该子网传输的所有以太网帧应手动填充0.

因此,数据大小应为(1560 - sizeof(IP标头) - sizeof(TCP标头)).

这就是我要这样做的方式:

  1. 我设置TCP_CORK选项以减少数据的分段.它不可靠,因为有200毫秒的天花板,但它的工作原理.

  2. 我知道IP头的大小(20字节),因此数据长度应该等于(1540 - sizeof(TCP头)).

  3. 那就是问题所在.我不知道TCP头大小.它的"选项"字段的大小是浮动的.

所以,问题是:如何获得TCP头的大小?或者也许有一些方法来发送带有固定长度标头的TCP帧?

c linux network-programming tcp mtu

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

Django和猴子修补问题

我最近在业余时间开始尝试使用Django来处理一些Web应用程序.在为一个设计数据模型时,我遇到了使用继承来定义网站用户或使用已经由框架提供的User类进行猴子修补的技术的困境.

我尝试通过(根据以下方式定义了所有模型等而没有错误python manage.py validate)添加字段:

User.add_to_class('location', models.CharField(max_length=250,blank=True))

并执行了syncdb命令.但是,我一直收到这个错误

OperationalError:没有这样的列:auth_user.location

我是在网站的管理员视图还是manage.py shell.必须有一个我缺少的额外步骤,但似乎有关整个猴子修补技术的文档有限.所以,在我诉诸继承之前,我会请求你的帮助.当然欢迎任何代码,提示或指向其他文档的链接.

提前致谢.

PS.我知道这种技术很难看,而且可能是不明智的.;)

python django monkeypatching

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

解释Ruby代码片段

我又处于那种不舒服的位置,有人给我留下了一个我不知道的语言的代码片段,我必须保留它.虽然我没有向自己介绍Ruby,但它的一些部分非常简单,但我还是想听听你的解释.开始:

words = File.open("lengths.txt") {|f| f.read }.split # read all lines of a file in 'words'?

values = Array.new(0)
words.each { |value| values << value.to_i } # looked this one up, it's supposed to convert to an array of integers, right?
values.sort!
values.uniq!

diffs = Array.new(0) # this looks unused, unless I'm missing something obvious
sum = 0
s = 0 # another unused variable
# this looks like it's computing the sum of differences between successive
# elements, but …
Run Code Online (Sandbox Code Playgroud)

ruby

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

使用free()函数的问题

我有一个char *str[xx]经常使用员工的C程序.一些字符串使用赋值运算符(=)填充,无需释放.但是其他一些(在同一个数组中)填充使用strdup(),需要在程序结束时释放:

char*str [10];

STR [1] = "您好";

STR [K] =的strdup( "HI");

两个字符串指针都是非空的,释放str [i]自然会产生"seg fault".我的问题是,在我的程序结束时,我没有跟踪哪个指针指向由其生成的字符串strdup().你可以帮助我找到生成的字符串,strdup以便我可以释放它们吗?谢谢

c linux free

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

无法在windbg中读取崩溃转储

我的程序中出现了stackoverflow异常,可能源自第三方库,microsoft.sharepoint.client.runtime.dll.

使用adplus创建崩溃转储,我面临的问题是,当我在windbg中打开它时,我正在努力从中获取任何信息.这是我作为回应得到的:

> 0:000> .restart /f

Loading Dump File [C:\symbols\FULLDUMP_FirstChance_epr_Process_Shut_Down_DocumentumMigrator.exe__0234_2011-11-17_15-19-59-426_0d80.dmp]
User Mini Dump File with Full Memory: Only application data is available

Comment: 'FirstChance_epr_Process_Shut_Down'
Symbol search path is: C:\symbols
Executable search path is: 
Windows 7 Version 7601 (Service Pack 1) MP (8 procs) Free x64
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Machine Name:
Debug session time: Thu Nov 17 15:19:59.000 2011 (UTC + 2:00)
System Uptime: 2 days 2:44:48.177
Process Uptime: 0 days 0:13:05.000
.........................................WARNING: rsaenh overlaps cryptsp …
Run Code Online (Sandbox Code Playgroud)

windbg adplus

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

我的c程序打印"内存不足" - 错误,但有很多可用的内存空间

我的程序返回内存错误,而不使用超过1 MB.我在dev-cpp编译器中编写C语言.原来的程序太大了,无法放在这里.这个非常简单的程序适合我:

int main(){int a[520076]; return 0;}

并返回值0.但是,这个:

int main(){int a[520077]; return 0;}

不起作用,原因是记忆.我使用的是Windows 8,但Windows 7中出现了同样的问题.看起来系统对进程可以使用的内存空间进行了限制.也许dev-cpp还可以建立边界吗?

c memory dev-c++

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

KMP故障函数计算

我的教授解决了kmp失败函数如下:

index  1 2 3 4 5 6 7 8 9
string a a b a a b a b b
ff     0 1 2 1 2 3 4 5 1
Run Code Online (Sandbox Code Playgroud)

从我在网上查看的其他文本中,我发现它可能是错的,我再次向他证实,他告诉我他是绝对正确的.有人可以向我解释为什么他会以简单的一步一步的方式认为这是对还是错?谢谢

knuth string-matching knuth-morris-pratt

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

fork()如何使用像stdout这样的缓冲流?

请看下面的代码.

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{

        fork();
        printf(".");
        fflush(stdout);
        fork();
        printf(",");

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

..,,,,
Run Code Online (Sandbox Code Playgroud)

这对我来说没问题,

但是如果我fflush(stdout)从上面的程序中删除那么输出应该是(根据我的理解).

  ...,.,.,.,
Run Code Online (Sandbox Code Playgroud)

陈述fork()是:紧接着后的陈述fork()被复制到父和子.

我的理解是:在第一个fork()之后有两个过程(假设它是过程p和过程c)我们有

进程p和c中的代码是:

    printf(".");
    fork();
    printf(",");
Run Code Online (Sandbox Code Playgroud)

现在,假设执行进程p和c的第一个语句,那么输出将是.

  ..
Run Code Online (Sandbox Code Playgroud)

现在fork()声明来执行.所以,执行后fork(),我们的过程就像p,pc,c,cc​​.

p,pc,c和cc中的每个代码都是

    printf(",");
Run Code Online (Sandbox Code Playgroud)

我们不冲洗,stdout所以printf(".")仍然存在于每个缓冲区中.

所以每个进程都会打印., 输出

 .,.,.,.,
Run Code Online (Sandbox Code Playgroud)

我的问题是:1)以前在哪里.. ?即根据我的解释,输出应该是

                ...,.,.,.,
Run Code Online (Sandbox Code Playgroud)

c linux

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

如何从shell执行Erlang模块的功能?

我有一个新手的问​​题.我正在阅读"Erlang编程"一书,并在每一章之后进行练习.

在我有一个db.erl模块的情况下,在其中我已经为几个练习放置了几个函数.经过几天的练习后,我已经厌倦了在erlshell中重复"compile-> execute exercise-function"动作.假设我正在研究模块中的new()功能db.erl; 每次修改这个函数后,我都被迫做下一个erl:

c(db.erl).
db:new().
Run Code Online (Sandbox Code Playgroud)

一次又一次.有时我忘记重新加载我的模块,结果令人困惑.我可以使用:编译/加载OS shell erl -compile file.erl; erl -make,但是我找不到从特定模块运行特定功能的方法.有什么建议?

erlang erlang-shell

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

Cortex M3上的非Thumb ARM代码

我有一些ARM代码,我试图在Cortex M3上运行.我用Thumb编写的大部分代码都是用C语言编写的 - 但对于某些函数,我希望能够运行普通的ARM代码(据我所知,这在M3上是可行的吗?).

所以...

原始C代码和汇编:

int donothing(int a) {
  return a;
}


00000068 <donothing>:
  68:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
  6c:   e28db000    add fp, sp, #0
  70:   e24dd00c    sub sp, sp, #12
  74:   e50b0008    str r0, [fp, #-8]
  78:   e51b3008    ldr r3, [fp, #-8]
  7c:   e1a00003    mov r0, r3
  80:   e28bd000    add sp, fp, #0
  84:   e8bd0800    ldmfd   sp!, {fp}
  88:   e12fff1e    bx  lr
Run Code Online (Sandbox Code Playgroud)

编译使用 arm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib

我转而使用blx r4- 如果基地址&3为0,它应该交换.

在GDB中逐步执行此操作,即使地址包含正确的数据,它也会一旦到达显示的行,就会进入HardFaults.

(gdb) …
Run Code Online (Sandbox Code Playgroud)

assembly arm thumb cortex-m

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