草庐IT

close_wait

全部标签

linux - 用非 IO 事件中断 epoll_wait,无信号

当前场景是epoll_wait在几个fds和一个可能的传入消息队列上,我希望epoll_wait下面的循环在IO事件或新消息上执行。我知道的方法:使用time毫秒超时并在循环中首先检查队列使用self-pipetrick当消息可用时从队列代码中获取用标准信号中断系统调用使用epoll_pwait并细化前一点上面的几点都不让我满意,我想知道是否还有其他我没有找到的方法。原因是:在多线程代码中要避免信号,而且不是很可靠Timeoutone消除了epoll的部分好处,仅通过事件唤醒Self-pipetrick看起来是目前最好的方法,但样板代码仍然太多想法? 最佳答

c - epoll_wait : maxevents

intepoll_wait(intepfd,structepoll_event*events,intmaxevents,inttimeout);我对maxevents参数有点困惑。假设我想编写一个可以处理多达10k连接的服务器。那么我会将maxevents定义为10000,还是出于某种原因它应该更低? 最佳答案 Maxevents就是*events指向的structepoll_events数组的长度。如果内核当时有超过该数量的事件要提供给您的程序,它将发现它不应该,因为您不希望在那个特定的_wait中返回那么多。您可能需要为您的程序

linux - 为什么我们需要在poll中调用poll_wait?

在LDD3中,我看到了这样的代码staticunsignedintscull_p_poll(structfile*filp,poll_table*wait){structscull_pipe*dev=filp->private_data;unsignedintmask=0;/**Thebufferiscircular;itisconsideredfull*if"wp"isrightbehind"rp"andemptyifthe*twoareequal.*/down(&dev->sem);poll_wait(filp,&dev->inq,wait);poll_wait(filp,&dev

linux - epoll_wait返回EPOLLERR时如何获取errno?

当epoll_wait为特定的fd返回EPOLLERR时,有没有办法找出errno?是否有关于错误性质的进一步信息?编辑:添加更多信息以防止歧义epoll_wait等待多个文件描述符。当你调用epoll_wait时,你传递给它一个epoll_event结构数组:structepoll_event{uint32_tevents;/*Epollevents*/epoll_data_tdata;/*Userdatavariable*/};epoll_data_t结构与您使用epoll_ctl将文件描述符添加到epoll的结构具有相同的细节:typedefunionepoll_data{voi

c - 检查 close() 错误的原因是什么?

注意:请在将其标记为重复之前阅读到最后。虽然它很相似,但我在答案中寻找的范围超出了上一个问题的要求。我倾向于同意的广泛做法倾向于将close纯粹视为文件描述符的资源释放函数,而不是具有有意义的失败案例的潜在IO操作。事实上,在theresolutionofissue529之前,POSIX在错误发生后未指定文件描述符的状态(即它是否仍在分配),使得无法以任何有意义的方式对错误做出可移植的响应。但是,许多GNU软件会竭尽全力检查close和Linuxmanpageforclose的错误。称未能这样做是“一个常见但仍然严重的编程错误”。NFS和配额被引用为close可能产生错误但未提供详细信

linux - 为什么我必须为子进程设置 `wait()`?

尽管等待linux手册页1很好地解释了您需要wait()来让子进程不变成僵尸,它根本没有说明原因。我计划我的程序(这是我的第一个多线程程序,请原谅我的天真)围绕一个for(;;)ever循环启动子进程,该子进程获取exec()ed并肯定会自行终止。我不能使用wait(NULL)因为这使得并行计算变得不可能,因此我可能必须添加一个存储子pid的进程表并且必须使用waitpid-不是立即,而是在一段时间后-这是一个问题,因为child的运行时间从几微秒到几分钟不等。如果我太早使用waitpid,我的父进程会被阻塞,当我太晚使用它时,我会被僵尸淹没,不能再fork()了,这不是只对我的过程不

c - 为什么我们需要在 pthread_cond_wait 之前进行条件检查

我正在尝试学习pthread_cond_wait的基础知识。在所有用法中,我都看到了if(condisfalse)pthread_cond_wait或while(condisfalse)pthread_cond_wait我的问题是,我们想要cond_wait只是因为条件为假。那我为什么要显式地放置一个if/while循环呢?我可以理解,如果在cond_wait之前没有任何if/while检查,我们将直接点击它,它根本不会返回。条件检查仅仅是为了解决这个目的还是有什么其他意义。如果它是为了解决不必要的条件等待,那么进行条件检查并避免cond_wait类似于轮询?我正在像这样使用cond_

c - "busy wait"与 "sleep"的权衡是什么?

这是对我之前问题的扩展Howdoesblockingmodeinunix/linuxsocketsworks?我现在从Internet上收集到的信息是,所有调用阻塞调用的进程都将进入休眠状态,直到调度程序找到解除阻塞的原因。原因可能因缓冲区为空、缓冲区已满或任何其他情况而异。但是,这是否可以成为一种有效的实时方式,比方说硬/稳固的实时应用程序?因为当解除阻塞条件成立时进程不会解除阻塞,而是当调度程序给他他的CPU分片并且解除阻塞条件都为真时。如果你想要一个响应式解决方案,我不认为“自旋锁”或“忙等待”是正确的方法,CPU片被浪费,并且整个系统将变得无响应或可能react迟钝。有人可以清

linux - Linux 是否保证文件内容在 close() 后刷新到磁盘?

当使用close()或fclose()关闭文件时(例如),Linux是否保证文件被写回(永久)磁盘?我的意思是,如果close()返回0,然后立即断电,是否保证之前写入的数据持久存在,即持久?fsync()系统调用确实提供了这种保证。关闭文件也足够了吗?目前我找不到任何以这种或那种方式提出声明的东西。问题二:如果close()确实隐式地执行了一个fsync(),有没有办法告诉它不要这样做? 最佳答案 来自“man2close”:Asuccessfulclosedoesnotguaranteethatthedatahasbeensuc

PHP 在使用 session_write_close() 时保存 session ;

我有一个页面,我在此页面的开头进行了长时间的轮询session_start();session_write_close();因为:topreventconcurrentwritesonlyonescriptmayoperateonasessionatanytime所以如果我不这样做并且长轮询正在运行,用户将无法加载另一个页面。因此,可以从此轮询页面访问session中的数据,但在我的脚本中的某个时间点,我必须将session保存回服务器,因为我对其进行了一些更改。有什么办法呢?这将是非常好的,这将是一种做类似事情的方式session_write_open();//dostuffsess