Articles of 队列

在哪里可以findLinux版本的sys / queue.h头文件?

sys/queue.h首先出现在4.4BSD中。 Linux已经将它包含在它的发行版中,但版本看起来不是最新的。 FreeBSD版本实现了单链表,单链尾列,列表和尾列。 Linux版本实现列表,尾部队列和循环队列。 我在我的Ubuntu PC中安装了libbsd-dev软件包,然后在/usr/include/bsd/sys/queue.hfind了BSD版本的sys/queue.h 。 我的问题: 我在哪里可以find这个头文件的Linux版本? 这两个实现之间的主要区别是什么? Linux版本只是BSD的过时版本吗?

了解SLIST – queue.h

我一直在寻找如何使用sys / queue.h中定义的macros使用单链表,我有一些疑惑。 目前我正在尝试使用相同的方式创build一个简单的列表。 请注意,下面的程序是不完整的,我只把我觉得是有关的部分。 int main() { SLIST_HEAD(slisthead, entry) head = SLIST_HEAD_INITIALIZER(head); struct slisthead *headp; struct entry { SLIST_ENTRY(entry) entries; }*n1, *n2, *n3, *np; /* Upon expanding the macro we would get, * struct entry { * struct { * struct entry *sle_first; * } entries; * }*n1, *n2, *np; */ 我不明白为什么“sle_first”完全存储在另一个结构中。 不能SLIST_ENTRY扩展到类似于下面的东西? #define […]

在等待队列中唤醒进程

我正在编写一个Linux内核模块。 有两个进程A,B和两个等待队列WQA和WQB。 目前stream程A正在WQA上睡觉。 当B在WQB上睡觉的时候,我想让A被唤醒,这样当A开始时,B已经在WQB上等待了。 我怎么能自动唤醒A,并把WQB?

lftp + bash脚本+variables

我使用lftp从外部服务器镜像文件,但现在我需要的是在成功下载重命名源目录(在远程服务器上)之后。 基本上我需要打开远程服务器列表目录上的连接,下载所有名称从“todo”即todo.20121019开始的dirs成功后,我必须将下载的目录重命名为“done.20121019”。 服务器上可能有多个目录。 远程FTP服务器仅在主动连接的情况下工作 #!/bin/bash directories=`lftp -f lftp_script_file.lf |grep done|awk '{print $NF}'` for i in $directories do echo $i //here I get list of directories that should be downloaded and renamed done lftp_script_file.lf只是列表directires: set ftp:passive-mode false; open ftp://user:pass$@10.10.10.123 ls my_sub_dir/ 有没有办法: 打开连接到FTP服务器 find我想要下载的目录 添加这些目录队列和下载 重命名远程服务器上的目录 在batch file? 我试图达到的目的是列出dirs查找interesing的,下载和重命名,但我不能find一种方法来通过bash脚本和“set ftp:passive-mode false”发布目录列表到lftp。

Linux scsi命令队列

我是这个论坛的新手。 我目前被困在一个问题。 我是Linux内核驱动程序的初学者,目前参与开发块大容量存储设备的Linux SCSI设备驱动程序。 开发平台在Fedora 14的高端机器上。该设置是1个主机到一个LU /设备。 长话短说,驱动程序正在初始化没有问题的意义上,它可以检测到设备并发送scsi帧,它可以读写设备,我可以做稳定的Iometer读写通过驱动程序testing。 所有这一切,当一次只有一个优秀的命令(不排队)。 问题是,我无法排队工作。 除了我的scsi_done()第一个命令,上面的SCSI层不会向我发送多个命令(LLD)。 我希望上层可以在发送命令给设备进行处理之前多次调用queuecommand() ,然后设备中断我的响应,并让LLD使用scsi_done()closures命令。 没有排队,我们的速度很慢。 我已经调整了我认为连接到队列的值,例如在scsi_host和scsi_host_template中将.can_queue和.cmd_per_lun设置为我的目标queue_depth。 基本上我玩过各种价值,包括1,但无济于事。 我也做了禁用和启用标记,如果这有什么影响,但仍然没有改变。 到目前为止,我不记得在驱动程序中使用scsi_device ,除了在slave_configure 。 有什么我失踪,仍然可以在司机级别? 我不能相信Linux不会支持命令队列。 我在这里错过了一些东西。

不能设置POSIX消息队列属性

我的环境: CentOS 6.5(64位内核) gcc 4.4.7 20120313 我正在尝试为POSIX消息队列设置属性,但代码不会更改属性。 我只获得默认的属性值。 你能指出我的代码有什么问题吗? 我作为一个用户(而不是根)执行a.out。 #include <stdio.h> #include <mqueue.h> // for message queue #include <sys/stat.h> #include <stdlib.h> // for EXIT_FAILURE #include <string.h> /* gcc [file] -lrt */ static void showAttr(mqd_t mqd) { struct mq_attr attr; mq_getattr(mqd, &attr); printf("maxmsg = %d\n", attr.mq_maxmsg); printf("msgsize = %d\n", attr.mq_msgsize); printf("curmsgs = %d\n", attr.mq_curmsgs); } […]

奇怪的阻塞行为与python多处理队列put()和get()

我已经在python 2.7(linux下)写了一个类,它使用多个进程asynchronous操作数据库。 当我使用multiprocessing.Queue.put()和multiprocessing.Queue.get() ,我遇到了一个非常奇怪的阻塞行为,我无法解释。 以下是我所做的简化版本: from multiprocessing import Process, Queue class MyDB(object): def __init__(self): self.inqueue = Queue() p1 = Process(target = self._worker_process, kwargs={"inqueue": self.inqueue}) p1.daemon = True started = False while not started: try: p1.start() started = True except: time.sleep(1) #Sometimes I start a same second process but it makes no difference to my problem […]

在C中为* nix创build线程安全定时队列

我的程序的一部分创build了一些消息。 这些消息然后在第二部分中处理。 我需要在我的程序部分之间的某种定时队列,可以在X秒内保存消息。 当这个定时队列存在时,X不会改变。 理想情况下,这应该是这样的: tqueue_t *tqueue_new(int seconds); int tqueue_push(tqueue_t *queue, void *msg); void *tqueue_pop(tqueue_t *queue); tqueue_pop()应该阻塞并返回第一条消息在队列中X秒。 做这个的最好方式是什么? 也许有一些已经存在的解决scheme? 语言:C OS:* nix 此外,这个队列应该在线程环境中工作。

新的linux tc排队纪律创造爆发…跑出了知识

我想为linux内核写一个新的tc排队规则。 目标是排队,例如。 十个数据包然后全部发送出去(我知道,这对于networking来说不是一件好事,但是我想对此进行一些研究)。 所以,已经做了什么:我有一个新的sched模块(enqueue,dequeue函数等)的框架,这也正确编译和正确工作(一个数据包排队,一个数据包发送 – 没有什么特别的)。 我正在使用与运行的内核相同的源代码在ubuntu maverick上编译它,并将我的模块放在Makefile和Kconfig中。 我发现,每次调用enqueue函数时,此后通过qdisc_restart(在sch_generic.c中)调用dequeue函数 – 并且只发送一个数据包。 我的问题是:我怎么能从模块发送多个数据包到networking接口,就像我为例如收集的那样。 10个包,现在我想全部发送出去? 我尝试使用与qdisc_restart(和locking机制)中相同的参数来调用sch_direct_xmit函数(来自sch_generic.c) – 但是,然后,我的模块编译失败:未知符号sch_direct_xmit(但为此,grep / proc / kallsyms结果)。 任何想法,这是怎么回事? 如果需要一些代码,只要让我知道(我包括在sched_generic.c相同的.h) BR Christoph

丢弃传入的UDP数据包而不读取

在某些情况下,我想用尽可能less的开销来明确地丢弃在套接字上等待的数据包。 似乎没有明确的“drop udp buffer”系统调用,但也许我错了? 下一个最好的方法可能是将数据包recv一个临时缓冲区,然后放下它。 看来我不能接收0字节,因为男人说关于recv : The return value will be 0 when the peer has performed an orderly shutdown. 所以在这种情况下1是最小的。 有没有其他办法来处理这个问题? 以防万一 – 这不是一个不成熟的优化。 这个服务器唯一做的就是以特定的方式转发/发送UDP数据包 – 尽piperecv len=1 recv不会杀了我,我宁愿只是用一些更具体的函数丢掉整个队列(希望降低延迟)。