#include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<string.h>
#include<sys/stat.h>
#define SIZE 100
void main()
{
int shmid,status;
pid_t pid;
int i;
char *a,*b,d[100];
shmid=shmget(IPC_PRIVATE,SIZE,S_IRUSR | S_IWUSR);
pid=fork();
if(pid==0)
{
b=(char *) shmat(shmid,NULL,0);
printf("enter");
printf("%c",*b);
shmdt(b);
}
else
{
a=(char *) shmat(shmid,NULL,0);
printf("enter a string");
scanf("%s",&d);
strcpy(a,d);
shmdt(a);
}
}
我试图将父进程中的字符串传递给子进程。但在将值扫描到“d”之前,程序将切换到子进程。我该如何纠正这个逻辑错误?我应该如何将这个字符串“d”传递给子进程?
答案 0 :(得分:1)
在调用fork之后,你永远不知道哪个进程会先执行。无论现在发生什么,您都必须简单地断言代码处理正确的进程间通信。
您可以使用pipe(2)或共享内存在同一主机上的不同进程之间传递数据。
#include <unistd.h>
int pipe(int pipefd[2]);
但是你也可以在调用fork之前将数据读入全局变量。 Fork将在新流程中创建全局数据的副本。
使用shmget
example共享内存。
答案 1 :(得分:-1)
Fork是一个系统调用,它创建了两个进程,一个称为父进程,另一个进程称为子进程! 要使它们能够进行通信,您需要应用进程间通信技术 你可以用
1.Pipes
2.FIFO-also known as Named pipes
3.Shared Memory
4.Message Queue
5.Semaphore
您需要知道使用它们的所有内容here!示例代码是在描述之后编写的