第一题
现在有2个.c 文件 1.c负责输入2个非0数,a 和 b 2.c负责找出 a 到 b 之间的所有质数 要求使用无名管道实现
int main(int argc, const char *argv[])
{
int arr[2];
int res=pipe(arr);
if(res==-1){
perror("pipe");
return 1;
}
res=fork();
if(res>0){
close(arr[0]);
while(1){
double buf[2]={0};
printf("输入数据:");
scanf("%lf %lf",buf,buf+1);
while(getchar()!=10);
write(arr[1],buf,16);
usleep(1000);
}
}else{
execl("./02","02",NULL);
}
return 0;
}
int main(int argc, const char *argv[])
{
close(4);
while(1){
double buf[2]={0};
read(3,buf,16);
int a=(int)buf[0];
int b=(int)buf[1];
int i=0;
int j=0;
for(i=a;i<b;i++){
for(j=2;j<i;j++){
if(i%j==0){ break;}
}
if(i==j){
printf("%d ",i);
}
}
printf("\n");
}
return 0;
}
第二题
创建一对父子 父进程负责输入一串字符串 子进程负责判断这串字符串是否为回文字符串
int main(int argc, const char *argv[])
{
int arr[2]={0};
int res=pipe(arr);
if(res==-1){
perror("pipe");
return 1;
}
res=fork();
if(res>0){
close(arr[0]);
while(1){
char val[100];
printf("输入数据:");
scanf("%s",val);
write(arr[1],val,sizeof(val));
usleep(1000);
}
}else if(res==0){
close(arr[1]);
while(1){
char val[100];
read(arr[0],val,sizeof(val));
int i=0;
int j=strlen(val)-1;
while(i<=j&&val[i]==val[j]){
i++;
j--;
}
if(i>j){
printf("%s是回文数\n",val);
}else{
printf("%s不是回文数\n",val);
}
}
}
return 0;
}
第四题
使用有名管道,实现2个进程之间的互相聊天 注意:一定是一方可以一直发消息,另一方不回消息,或者在任意时间随意回复几条消息。千万不能是一方发送消息后,去等待另一方的回复后才能发送另一条消息
int main(int argc, const char *argv[])
{
if(access("./zyfifo1",F_OK)==-1){
mkfifo("./myfifo1",0666);
}
if(access("./zyfifo2",F_OK)==-1){
mkfifo("./myfifo2",0666);
}
int fd1=open("./myfifo1",O_WRONLY|O_TRUNC);
int fd2=open("./myfifo2",O_RDONLY);
printf("管道文件打开成功\n");
int res=fork();
if(res==0){
while(1){
char buf[64]={0};
scanf("%64s",buf);
while(getchar()!=10);
write(fd1,buf,strlen(buf));
}
}else{
while(1){
char buf[64]={0};
read(fd2,buf,64);
printf("%s\n",buf);
}
}
close(fd1);
close(fd2);
return 0;
}
int main(int argc, const char *argv[])
{
if(access("./zyfifo1",F_OK)==-1){
mkfifo("./myfifo1",0666);
}
if(access("./zyfifo2",F_OK)==-1){
mkfifo("./myfifo2",0666);
}
int fd1=open("./myfifo1",O_RDONLY);
int fd2=open("./myfifo2",O_WRONLY|O_TRUNC);
printf("管道文件打开成功\n");
int res=fork();
if(res==0){
while(1){
char buf[64]={0};
read(fd1,buf,64);
printf("%s\n",buf);
}
}else{
while(1){
char buf[64]={0};
scanf("%64s",buf);
while(getchar()!=10);
write(fd2,buf,strlen(buf));
}
}
close(fd1);
close(fd2);
return 0;
}