在使用Linux pthread和libpcap时,我注意到使用时有些奇怪的行为pcap_breakloop。我的目标是:
打开一个新线程,该线程将运行pcap_loop并处理捕获的数据包,而主线程将执行其他操作。收到信号(SIGINT)或退出时,将设置一个全局变量,并且主线程将发出指令pcap_breakloop以结束第二个线程,然后完成自身。
这个想法可能仍然需要一些工作,但是我注意到的奇怪行为是:
当我们创建一个bpf_program结构和编译pcap_compile,以进一步使用它作为在捕获过滤器,一旦我们退出使用循环pcap_breakloop有8个字节(包括内存泄漏pcap_freecode和pcap_close被调用)。即使不使用线程也是如此(就像在修改过的sniffex.c libpcap示例中所示)。没有过滤器(没有pcap_compile调用或bpf_program)的相同代码退出而没有内存泄漏。
libpcap会发生这种内存泄漏,就像我在其他库上看到的某些内存泄漏一样gtk吗?图书馆以后会处理吗?还是我看不到我的代码有问题?
下面是代码示例:使用pthread和修改后的sniffex示例的示例pcap_breakloop(由于代码很大,但由于实际差异很小,所以我还包括了diff原始sniffex和修改后的示例):
pthreads示例:
#include <pcap.h>
#include <stdio.h>
#include <pthread.h>
#include <signal.h>
int CLOSE_PROGRAM = 0;
int CAPTURE_SETUP_SUCCESS = 0;
pcap_t *handler; //pcap_t handler and filter structure are globals …Run Code Online (Sandbox Code Playgroud) 调用后,scanf("%d", &variable);我们会在stdin处留下一个换行符,应该在调用 之前清除fgets它,否则我们最终会为其提供换行符并使其过早返回。
我找到了建议scanf("%*[^\n]%*c");在第一次调用后使用scanf以丢弃换行符和其他建议使用scanf("%*[^\n]\n");. 从理论上讲,这两个应该工作:一是要消耗的一切,是不是一个换行符(但不包括新行本身),然后消耗正好一个字符(新行)。第二个将消耗不是换行符的所有内容(不包括它),然后\n,一个空白字符,将指示scanf读取每个空白字符,直到第一个非空白字符。
然而,尽管我认为这些方法在某些答案中有效,但我无法让它们在这里工作(下面的代码)。
为什么这两种scanf方法都不起作用?
测试:Ubuntu Linux - gcc5.4.0
scanf("%*[^\n]\n"); 方法:#include <stdio.h>
int main(int argc, char **argv){
int number;
char buffer[1024];
printf("Write number: \n");
scanf("%d", &number);
//Clearing stdin?
scanf("%*[^\n]\n");
printf("Write phrase: \n");
fgets(buffer, 1024, stdin);
printf("\n\nYou wrote:%u and \"%s\"\n", number, buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ ./bug
Write number:
2
Write phrase:
You wrote:2 and " …Run Code Online (Sandbox Code Playgroud) 迭代文件夹中的文件数组时_data,对文件进行排序的默认标准是什么?
起初我希望它按字母顺序排序,但经过一些测试后我意识到事实并非如此。尽管如此,我还是无法弄清楚对文件进行排序的标准是什么。
{%- for file in site.data.folder -%}
{{ file | inspect }}
<br />
<br />
{%- endfor -%}
Run Code Online (Sandbox Code Playgroud)
据我了解,file这是一个包含文件名作为第一个元素和数据作为第二个元素的数组,因此我不确定sort与任何属性名称一起使用是否有效。当我尝试时,我收到了错误消息:
Liquid Exception: no implicit conversion of String into Integer
当不带参数使用时sort,我可以返回按文件名字母顺序排序的文件:
{%- assign files = site.data.folder | sort -%}
{%- for file in files -%}
{{ file | inspect }}
<br />
<br />
{%- endfor -%}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
_data?site.data.folder)创建默认 Jekyll 页面后,我创建了目录_data/folder,其中包含 5 个随机 …