在不使用fork()函数的情况下,可以使用其他进程间通信(IPC)机制进行进程间通信。以下是两个进程之间通信的几种常见的方法:
#include
#include
#include
int main() {
int fd[2];
char buffer[20];
pipe(fd);
if (fork() == 0) { // 子进程
close(fd[0]); // 关闭读取端
char* child_message = "Hello from child process!";
write(fd[1], child_message, strlen(child_message) + 1);
close(fd[1]);
} else { // 父进程
close(fd[1]); // 关闭写入端
read(fd[0], buffer, sizeof(buffer));
printf("Received message in parent process: %s\n", buffer);
close(fd[0]);
}
return 0;
}
#include
#include
#include
void signal_handler(int signal_number) {
printf("Received signal in child process: %d\n", signal_number);
}
int main() {
pid_t pid;
signal(SIGUSR1, signal_handler);
if ((pid = fork()) == 0) { // 子进程
printf("Child process is running.\n");
sleep(1);
kill(getppid(), SIGUSR1); // 发送信号给父进程
} else { // 父进程
printf("Parent process is running.\n");
sleep(2);
}
return 0;
}
#include
#include
#include
#include
#define SHMSIZE 1024
int main() {
int shmid;
key_t key;
char *shared_memory, *message;
key = ftok(".", 'R');
shmid = shmget(key, SHMSIZE, 0666 | IPC_CREAT);
if (fork() == 0) { // 子进程
shared_memory = shmat(shmid, (void *)0, 0);
message = "Hello from child process!";
sprintf(shared_memory, "%s", message);
shmdt(shared_memory);
} else { // 父进程
wait(NULL);
shared_memory = shmat(shmid, (void *)0, 0);
printf("Received message in parent process: %s\n", shared_memory);
shmdt(shared_memory);
shmctl(shmid, IPC_RMID, NULL);
}
return 0;
}
这些方法只是几种常见的进程间通信方式,实际上还有其他更多的方式,如消息队列、信号量等。具体选择哪种方法取决于实际需求和场景。