我运行程序时是按上面这个写的,但是get取不到值set可以放进TCPCommand
时间: 2024-04-15 18:27:36 浏览: 70
非常抱歉,我之前给出的代码确实有问题。在多进程的情况下,使用线程间共享的全局变量是无法实现进程间通信的。在这种情况下,你需要使用进程间通信(IPC)机制来实现两个进程之间的数据传递。
以下是一个使用共享内存的示例代码,可以在多个进程之间实现TCPCommand的设置和获取:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHM_KEY 1234
#define SHM_SIZE 1024
typedef struct {
int isReady;
char command[SHM_SIZE];
} SharedData;
int SetTCPCommand(char *command) {
key_t key = ftok(".", SHM_KEY);
int shmid = shmget(key, sizeof(SharedData), IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
return 0;
}
SharedData *sharedData = (SharedData *)shmat(shmid, NULL, 0);
if (sharedData == (void *)-1) {
perror("shmat");
return 0;
}
sharedData->isReady = 1;
strncpy(sharedData->command, command, SHM_SIZE - 1);
shmdt(sharedData);
return 1;
}
int GetTCPCommand(char **command) {
key_t key = ftok(".", SHM_KEY);
int shmid = shmget(key, sizeof(SharedData), 0);
if (shmid == -1) {
perror("shmget");
return 0;
}
SharedData *sharedData = (SharedData *)shmat(shmid, NULL, 0);
if (sharedData == (void *)-1) {
perror("shmat");
return 0;
}
if (!sharedData->isReady) {
printf("TCP command is not ready\n");
shmdt(sharedData);
return 0;
}
*command = malloc(SHM_SIZE);
strncpy(*command, sharedData->command, SHM_SIZE - 1);
sharedData->isReady = 0;
shmdt(sharedData);
return 1;
}
```
在这个示例代码中,使用了共享内存来存储TCPCommand的值。`SetTCPCommand`函数将命令字符串复制到共享内存中,并设置一个标志表示命令可用。`GetTCPCommand`函数从共享内存中获取命令,并在获取后将标志重置。
请确保在运行两个进程之前先运行一个进程调用`SetTCPCommand`函数设置TCPCommand的值,然后再运行另一个进程调用`GetTCPCommand`函数获取TCPCommand的值。
希望这次能解决你的问题!如果你还有其他问题,请随时提问。