Articles of pipe理员

用O_WRONLY挂在open()上的C ++ Linux命名pipe道

这是我简单的代码,打开一个命名pipe道,写一个string,然后closurespipe道。 pipe道是在另一个函数中创build的,如下所述。 char * ipcnm = "./jobqueue"; std::cout << "opening job queue" << std::endl; //ensure the jobqueue is opened if ((jobq = open(ipcnm, O_WRONLY)) < 0) { perror("open"); exit(-1); } std::cout << "queue opened" << std::endl; // record the number of bytes written to the queue size_t written = write(jobq, ptr, size*nmemb); // close fifo […]

如何真正释放Linux中的巨大页面以供新进程使用?

真的找不到这个..希望有人可以帮助。 我正在打造一个100GB的Java堆作为大数据caching。 为了避免与文件系统caching之类的冲突,并且因为它在一般情况下performance更好,我将在大页面中分配它。 我保留了51,200 x 2MB的大页面,一切都很顺利。 然而,当我终止进程然后重新启动时,看起来Linux将这些页面中的一部分留作“rsvd”。 # less /proc/meminfo | grep Hug AnonHugePages: 0 kB HugePages_Total: 52000 HugePages_Free: 50952 HugePages_Rsvd: 1634 HugePages_Surp: 0 Hugepagesize: 2048 kB 据我所知,我没有任何其他系统configuration为请求或保留这些页面。 Linux为我提供了一种方法,让我看看是什么保留了那些保留的和/或使该保留无效的? 从我发现的一切谷歌他们并没有被实际使用,只是Linux保留了他们的储备,但有趣的是不允许我重新启动我的巨大JVM时使用它们。 任何帮助将是伟大的。

Java读生活日志文件

我正在用Java编写一个cod4服务器控制器(我知道那里有完美的服务器控制器,但我想从中学习)。 现在我想根据日志文件中的条目采取具体的操作,这个文件经常被鳕鱼更新,文件会变得很大。 现在我怎样才能有效地读取每一秒左右文件已经改变的部分呢? 或者是否有办法将日志文件中的所有内容都发送给Java?(我读了一些关于pipe道的内容)。 服务器在Linux上运行。 日志文件不需要保存在同一个位置,因为所有的东西都应该通过Java来保存。 大约一秒或2秒的延迟是可以接受的,但不再是。

正确的fork()和pipe()用于具有多个子项的单个父项。 我该如何解决这个问题?

所以,我以前的post被标记为脱离主题,太模糊,并要求有用的代码的意见和build议。 它做了这些事情,所以我重新张贴作为我正在工作的代码的问题。 感谢上一篇文章中的内容,通过回顾你们所说的话,我能够把我在这里所得到的结果分解开来。 这里的重点是父/子关系和使用fork()和pipe()来获得所需的影响。 该项目是一个POSIX纸牌游戏,父母(经销商)从父母手中分出5个孩子(玩家)和自己的pipe道。 父母向玩家发牌(至less5卡),直到一个玩家拥有3个(不丢弃)。 获胜的孩子将获胜的手和EOF(退出(0))传送给父母以宣告胜利。 这会触发父母打印胜出的玩家,并将EOF传送给其余的孩子将其closures(退出(1))。 父母然后closures。 如果父母没有获胜者到达甲板的末端,则将EOF传递给孩子,等待他们退出(1)…然后closures。 我所面临的主要问题是孩子的程序如何分别读取每张卡片,而不是一遍又一遍地从pipe道读取相同的值。 我想我缺less一种方法来同步父母写入pipe道和孩子从pipe道读取。 我对这个家伙是全新的,所以任何帮助都非常感激。 非常感谢。 代码更新:(编译很多问题)完成和编译,但我显然有pipe道和通过它们传递数据的麻烦。 没有玩游戏,没有读取或写入pipe道,离开僵尸进程,这里是错误的。 我很感激任何投入在我的混乱。 大声笑 这是我运行程序(play.c)时的输出: os@debian:~/Documents/cpsc351/projects/assn2$ gcc -o play play.c os@debian:~/Documents/cpsc351/projects/assn2$ ./play Pipe Success…toChild 1 created. Pipe Success…toParent 1 created. Pipe Success…toChild 2 created. Pipe Success…toParent 2 created. Pipe Success…toChild 3 created. Pipe Success…toParent 3 created. Pipe Success…toChild 4 created. Pipe […]

在mono / Linux下从命名pipe道读/写

我想从Linux下的命名pipe道/ FIFo队列中读/写。 我已经尝试了System.IO中的标准类StreamWriter和其他类,但是因为使用了seek而失败了。 有没有人使用Mono写入/读取命名pipe道? 我正在努力阅读和写作 – 但不是同一时间…

Linux是否提供低于堆栈底端的保证无法访问的内存区域?

Linux是否提供低于低端堆栈端的无法访问的内存区域,并具有保证的最小大小? 如果这种保证的最小尺寸存在,那是什么? 或换句话说,我什么时候该开始担心alloca()或者让我指向有效的非堆栈内存?

malloc像使用自定义堆的函数

如果我想用自定义的预分配堆构buildmalloc类似的function,C中最好的方法是什么? 我的具体问题是,我有一个已经被放置到我的地址空间的mmap-able(类似于内存)的设备,但是我需要获得一个更灵活的方式来使用这个内存来存储将被分配和释放的对象。 我知道malloc,free和其他类似的函数是用来在堆上执行这种分配的,但是有什么办法可以使用这种函数提供的逻辑来实现它的dynamic行为,同时提供我自己的地址空间来操作有问题的堆?

在Linux中以编程方式设置自定义文件夹/目录图标

在Linux中,是否可以为桌面/文件pipe理器中显示的文件夹/目录设置自定义图标? 例如,对于Windows资源pipe理器,可以在文件夹的desktop.ini文件中设置自定义图标? 如果是这样,是否有一个共同的机制或API函数来做到这一点(这可能在发行版/桌面/文件pipe理器中很常见)? 我想从一个独立的控制台模式程序C ++或者可能使用桌面API的KDE,GNOME等。(也是Unix CDE和OSX)

如果一个孩子的过程在阅读的时候不会从写作中结束,会发生什么?

给出以下代码: int main(int argc, char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } if (pipe(pipefd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ […]

最后一个分叉的孩子不会死

我有两个主要的过程分叉,从而创造两个孩子。 这两个孩子是这样互相配pipe的: ls | more 现在的问题是,第二个孩子永远不会死亡。 这是为什么? 什么时候pipe道中的最后一个孩子真的死了? 除去一个wait()调用显示ls | more的预期结果 ls | more但给出了一些更奇怪的行为(卡住terminal等)。 这是我的代码: int main(){ printf("[%d] main\n", getpid()); int pip[2], i; pipe(pip); /* CHILDREN*/ for (i=0; i<2; i++){ if (fork()==0){ /* First child */ if (i==0){ printf("[%d] child1\n", getpid()); close(1); dup(pip[1]); close(pip[0]); execlp("ls", "ls", NULL);} /* Second child */ if (i==1){ printf("[%d] child2\n", […]