Tag: fork

如何读取/写入匿名共享映射?

尝试使用子进程将消息写入匿名共享内存,然后终止它。 然后让父母读取消息。 我已经看到了使用通过write调用获得的文件描述符来映射输入和输出文件的示例。 但不知道如何正确处理这个问题。 int main(void) { char *shared; int status; pid_t child; shared = mmap(0, sizeof(int) , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); if (shared == MAP_FAILED) { perror(“mmap”); return 1; } child = fork(); if ( child == -1 ) { perror(“fork”); return 1; } else if (child == 0) { […]

调用分叉进程中的读取不起作用(Linux C)

C初学者在这里。 我试图在fork_reducer方法中读取我的reducer_pipes ,但是当我调用read , read下没有任何read被执行。 如果我不打电话给它,它会被执行。 read方法似乎不打印任何错误消息。 C代码 #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1024 #define ALPHA_OFFSET 97 #define LETTERS 26 const int NUM_OF_MAPPERS = 4; const int NUM_OF_REDUCERS = 26; const int PIPE_READ_END = 0; const int PIPE_WRITE_END = 1; const int PIPE_BUFFER_SIZE = 1000; int mapper_pipes[4][2]; int reducer_pipes[26][2]; void […]

如何计算fork进程的位置

如何在代码中添加计数器,以便能够计算每个进程的位置。 现在我得到以下输出: Process Pid: 6179 PPid: 4378 (position: ?). Process Pid: 6181 PPid: 6179 (position: ?). Process Pid: 6180 PPid: 6179 (position: ?). Process Pid: 6185 PPid: 6180 (position: ?). Process Pid: 6183 PPid: 6181 (position: ?). Process Pid: 6182 PPid: 6181 (position: ?). Process Pid: 6184 PPid: 6180 (position: ?). 我想要的是能够在树中输出Pid位置: Process Pid: 6179 […]

命令行参数未在C中执行

我试图将参数传递给ls命令的execl()函数。 但是当我通过时 /bin/ls -l -a 作为我的程序的参数,execl()函数不识别最后两个参数。 为什么?这是代码: #include #include int main(int argc, char *argv[]) { int i,childpid; if(argc!=4) { printf(“you didn’t provide any commandline arguments!\n”); return 0; } childpid=fork(); if(childpid0); printf(“My ID %d, Parent ID %d, CHild ID %d\n”, getpid(),getppid(),childpid); return 0; } 我在Ubuntu上。 问候

c fork,exec,getpid问题

我是c语言和Linux的新手。 我有一个与fork(),getpid()和exec()函数有关的问题。 我用fork()编写了ac程序,调用我程序的代码是“代码: #include #include #include #include void fun() { printf(“\n this is trial for child process”); } int main (int argc, char const *argv[]) { int i,status,pid,t; if(pid=fork()<0) { printf("\nfailed to create the process\n"); } if(pid=fork()==0) { printf("\n the child process is created"); fun(); exit(1); } while(wait(&status)!=pid); return 0; } 该计划的输出如下: 子进程已创建 这是儿童过程的试验 子进程已创建 […]

使用wait()从子进程中检索返回码?

我有2个文件“prime.c”和“singlePrime.c”,并且在singlePrime.c中。我正在尝试创建一个将自身变形为“isPrime.exe”的子项,这是一个由“prime.c”构成的可执行文件。 我想要做的是从isPrime.exe获取返回数字,因此取决于输入的数字是否为素数,然后将它存储在1或0中,然后将其存储在“singlePrime.c”的main()函数内的childNum中,以便我可以根据“isPrime.exe”返回的1或0打印到终端是否为素数。 以下是我的2个文件: prime.c: /* File is isPrime.c Purpose: a program that checks if a given number is a prime number input: number – a positive int entered via the command line parameters. For example isPrime 1234 output: 0 – if the input number is not a prime number 1 – if the input number […]

当我们在c中使用fork时,进程之间是否共享数据?

在这个C程序中,数据不在进程即父进程和子进程之间共享。 child拥有它自己的数据,而parent拥有它自己的数据,但指针显示两个进程的相同地址。 它是如何在后台完成的? fork是否生成相同数据的副本? 如果是这样,那么我们对两个进程都有相同的指针地址。 或者是由于为每个进程复制的静态分配数据而且每个进程的数据是独立的? 我想知道它是如何完成的? #include #include #include int main() { //Static Array int X[] = {1,2,3,4,5}; int i, status; //The fork call int pid = fork(); if(pid == 0) //Child process { //Child process modifies Array for(i=0; i<5; i++) X[i] = 5-i; //Child prints Array printf("Child Array:\t"); for(i=0; i<5; i++) printf("%d\t", X[i]); […]

如何在C中按顺序执行子进程

我用C编写了一个代码来计算文件中的单词和字符。 像wc命令一样。 代码如下,工作正常。 #include #include #include #include #include #include char* concat(char *s1, char *s2) { char *result = malloc(strlen(s1)+strlen(s2)+1); strcpy(result, s1); strcat(result, s2); return result; } int countLines(char *f){ FILE *file = fopen(f, “r”); int count = 0; char ch; while ((ch = fgetc(file)) != EOF){ if (ch == ‘\n’) count++; } return count; } […]

除印刷换行外还有什么’\ n’?

评论第2行后,“Hello”打印9次,但评论第1行输出“Hello”超过9次。 我的问题是’\ n’在这方面的作用是什么? #include #include int main() { int tmp[10], i, n=0; for(i=0;i0) break; else { printf(“Hello\n”); // —- Line 1 printf(“Hello “); // —- Line 2 } } }

使用fork在c ++程序中调用非阻塞系统

基于这个SO post和这个例子 ,我希望当我使用fork()时,允许我以非阻塞方式执行system / execvp。 但是,当我尝试在上面提到的示例代码中的fork块中发出长时间运行的子进程时,控件不会返回父块,直到子进程完成。 你能告诉一个方法,我应该如何设计代码以允许在C / C ++代码中对系统进行非阻塞调用。 另外,我打算编写一个程序,其中多个孩子从同一个父母分叉。 我怎样才能得到孩子们的pid? 谢谢你的帮助。