我有一个包含父进程和子进程的程序.在fork()之前,父进程调用malloc()并用一些数据填充数组.在fork()之后,孩子需要那些数据.我知道我可以使用管道,但以下代码似乎有效:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main( int argc, char *argv[] ) {
char *array;
array = malloc( 20 );
strcpy( array, "Hello" );
switch( fork() ) {
case 0:
printf( "Child array: %s\n", array );
strcpy( array, "Goodbye" );
printf( "Child array: %s\n", array );
free( array );
break;
case -1:
printf( "Error with fork()\n" );
break;
default:
printf( "Parent array: %s\n", array );
sleep(1);
printf( "Parent array: %s\n", array );
free( array );
} …Run Code Online (Sandbox Code Playgroud) 我使用一个未命名的管道进行父进程和通过fork()创建的子进程之间的进程间通信.我正在使用unistd.h中包含的pipe()函数
我假设一旦两个文件描述符都被关闭(并且在两个进程中),管道被释放/释放/销毁/等等.但我没有在手册中找到任何明确说明这一点的内容.我正在制作一个可以运行很长时间的程序,所以我想防止内存泄漏和其他类似的事情.
我的函数体看起来像:
int pipefds[2];
pipe( pipefds );
if ( fork() == 0 ) {
close( pipefds[1] );
...
//Use pipefds[0]
close( pipefds[0] );
} else {
close( pipefds[0] );
...
//Use pipefds[1]
close( pipefds[1] );
}
Run Code Online (Sandbox Code Playgroud)
是否可以安全地假设在此函数终止于子节点和父节点之后,管道已被释放/释放/销毁/等.?
有没有明确说明这一点的文件?
谢谢
我想拍摄整个proc文件系统的快照,并将其保存在tarball中(或者在最坏的情况下将所有文本文件连接到一个文本文件中).
但是当我跑步时:
tar -c /proc
Run Code Online (Sandbox Code Playgroud)
我得到了一个段错误.
最好的方法是什么?我应该在每个文件中设置某种递归遍历吗?
我只有基本的*nix实用程序,如bash,cat,ls,echo等.我没有像python或perl或java那样的任何东西.
我有2个线程,线程A和线程B.
线程A从sys.stdin或管道的读取端获取数据(使用os.pipe()).无论从sys.stdin还是从管道的读取端读取任何数据,都会在TCP套接字上发送出去.线程A使用select.select()来确定它是应该从sys.stdin还是从管道的读取端读取,而select.select()使用1秒的超时来定期检查并确保套接字连接是还在那儿.
线程B保存管道的写入端,通常只将1个非常长的字符串写入管道,然后关闭写入端.
线程A如何检查管道上的EOF?基本上,我希望线程A在不再使用时关闭管道.但是,我不能冒险阻止管道上的read(),因为sys.stdin上可用的数据将被不必要地阻止.
任何帮助将不胜感激.谢谢!