gpt4 book ai didi

c - 如何在两个进程之间进行简单的同步

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:06 24 4
gpt4 key购买 nike

你好,我有一个关于程序的工作,就像一个 child 应该将一个数字打印到一个文本文件中,第二个 child 应该把这个数字同时打印到屏幕上。但是我的代码就像第一个 child 完成打印数字 09 然后第二个 child 开始将它们读到屏幕上一样。所以我猜这是一个同步问题。这是我的简单代码;

#include <stdio.h>     /* basic I/O routines.   */
#include <unistd.h> /* define fork(), etc. */
#include <sys/types.h> /* define pid_t, etc. */
#include <sys/wait.h> /* define wait(), etc. */
#include <signal.h> /* define signal(), etc. */
#include <pthread.h>

void write_num(void);
void print_screen(void);
//void catch_child(int);

int main(int argc, char* argv[]) {

int i, result, pid;

pid = fork(); /* creates a new process, you only want the parent to spawn children? */

switch (pid) {

case -1:
/* fork error */
printf("Error occured with fork()\n");
exit(1);
case 0:
/* child process */
write_num();
exit(0);
default:
/* parent process*/
{
//wait(&pid);
pid = fork(); /* fork new children here */


switch(pid) {

case -1:
printf("Error occured with fork()\n");
exit(1);

case 0:

print_screen();
exit(0);

default:
break;

}
}
}
wait(&pid);
execl("/usr/bin/killall","killall","tail",(char *) 0);
return 0;
}

void write_num(void){

FILE* fptr;
int i;

fptr=fopen("textfile.txt","w");

for(i=0; i<10; i++){

fprintf(fptr,"%d\n",i);
fflush(stdout);
sleep(1);

}
}

void print_screen(void){

execl("/usr/bin/tail","tail","-f","./textfile.txt",(char *) 0);
sleep(1);

}

/* first, here is the code for the signal handler
void catch_child(int sig_num)
{
when we get here, we know there's a zombie child waiting
int child_status;

wait(&child_status);
printf("child exited.\n");
}*/

顺便说一下,在 Ubuntu 中,我曾经使用 gcc -o process process.c -lpthread 进行编译。

如果您能提供帮助,我将不胜感激。

最佳答案

你需要改成

flush(fptr);  

关于c - 如何在两个进程之间进行简单的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com