gpt4 book ai didi

c - 使用 sigusr1 和 sigusr2 进行进程同步

转载 作者:行者123 更新时间:2023-11-30 17:43:00 25 4
gpt4 key购买 nike

我正在编写一个生产者进程来将数据 block 写入文件,以及一个消费者进程来读取同一 block ,但是下面的代码陷入了无限循环,现在从我的角度来看,我认为我有一个消费者进程实现中的问题!!

void wakeup() { ; };
unsigned int sleep ( unsigned int timer )
{
if (sigset(SIGALRM, wakeup)==-1) {
perror("sigset"); return 1;
}

(void)alarm( timer );
(void)pause();
return 0;
}



int main(void) {
int fd, n, i, SomeInt, DataRead;
pid_t pid, ppid;
char buf[4];
char *buf2;
int x=0;
if((fd=open("/tmp/data_file", O_APPEND|O_CREAT, 0640)) <0) exit(1);
sigset(SIGTERM,SIG_IGN);/* signal */ ; sigset(SIGINT,SIG_IGN); /* signal */
pid=fork();
switch (pid) {
case -1: { perror("FORK"); exit(1); } break;
case 0: /* child process - Producer */
sigset(SIGUSR1,wakeup);
sighold(SIGUSR1); /* block / hold signals SIGUSR1 until sigpause*/

FILE *file = fopen ("binary.txt", "r");
while (!feof(file))
{ n = (int)(getpid()%256);
srand((unsigned)n);
sleep(rand() %5);
for( x=0; x<=4;x++)
fscanf (file, "", buf[x]);

write(fd, buf,sizeof(buf));
ppid=getppid();
kill(ppid, SIGUSR2);
sigpause(SIGUSR1);

}

fclose(file);
fflush(stdin);


break;


default: /* -parent code - Consumer */


sigset(SIGUSR2,wakeup);
sighold(SIGUSR2); /* block / hold signals SIGUSR2 until sigpause*/
for (i=0; i<=100; i++) {
/* sleep a random amount of time */
n = (int)(getpid()%256);
srand((unsigned)n);
sleep(rand() %5);
sigpause(SIGUSR2); /* pause(); */
/* reads a character from file */
read(fd, buf,sizeof(buf));
fprintf(stderr,"Consumer PID=%d value=%d\n",getpid(),atoi(buf));
kill(pid, SIGUSR1) ;
}
break;
}
exit(0);
}

最佳答案

the below code gets stuck in an infinite loop, now from my side i think i am having a problem in the consumer process implementation

一个问题出现在生产者进程中,您在其中编写了一个无限循环,如下所示:

 while (!feof(file))
{ ...
for (x=0; x<=4; x++)
fscanf(file, "", buf[x]);
...
}

使用空格式字符串,您无法从文件中读取任何内容,因此永远不会到达 feof(file)

您遇到的其他严重问题包括缩进“风格”(如 AShelly 提到的)和缺乏错误检查(例如 fopen()write() )。

关于c - 使用 sigusr1 和 sigusr2 进行进程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336374/

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