如果有for(;;)
,我需要从stdin读取一些内容并保存到N
。read(stdin,N,sizeof(float))
和while(s!=EOF)
可能是s=getc(stdin)
我假设一个数字列表保存在stdin分隔的行末尾上
问题是:
您的程序必须将其pid打印为标准输出。然后,它应该开始从标准输入读取N的值,直到文件结束。在接收到信号(SIGUSR1)后,您的程序应该从sum(sum=0的第一个值)中减去(然后乘,然后除,然后减)N的值作为一个循环。收到SIGUSR2后,您的程序应该打印当前的总和。
我如何理解这个问题并尝试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
float N,sum=0;
int count=0;
void handler(int s){
count++;
if (s==SIGUSR1){
if (count==1){
sum-=N;
}
if (count==2){
sum*=N;
}
if (count==3){
sum/=N;
}
if (count==4){
sum+=N;
count==0;
}
}
else if (s==SIGUSR2){
printf("sum=%d",sum);
}
}
int main(){
pid_t pid=getpid();
signal(SIGUSR1,handler);
signal(SIGUSR2,handler);
printf("%d",pid);
fflush(stdout);
for(;;)
scanf("%d",&N);
return(0);
}
检查scanf
的返回值。它返回成功匹配的项目数,所以如果不返回1,那么就完成了。
while (scanf("%d", &N) == 1)
;