我有一个用OpenMP实现的客户端应用程序。该程序在收到SIGINT
信号时终止,但在这种情况下,它应该首先向服务器发送一条消息,指出用户已注销。我已经成功地实现了消息传递,但之后我一直无法让程序终止。收到SIGINT信号后退出程序
这里是我的代码的并行部分:
#pragma omp parallel num_threads(4)
{
#pragma omp sections
{
#pragma omp section
{
while(1)
{
char pom[1000];
fgets(pom, 1000, stdin);
if (strlen(pom) != 1)
{
char * buffer;
buffer = message(username, pom);
if (send(client_socket, buffer, strlen(buffer), 0) < 0)
{
callError("ERROR: cannot send socked");
}
bzero(pom, 1000);
free(buffer);
}
}
}
#pragma omp section
{
char buffer[4096];
char * data;
ssize_t length;
int received = 0;
int data_cap = 4096;
while(1)
{
data = calloc(BUFFER_LEN, sizeof(char));
while ((length = read(client_socket, buffer, BUFFER_LEN)) > 0)
{
received += length;
if (received > data_cap)
{
data = realloc(data, sizeof(char) * data_cap * 2);
data_cap = data_cap * 2;
}
strcat(data, buffer);
if (!isEnough(data))
{
break;
}
}
printf("%s", data);
free(data);
bzero(buffer, BUFFER_LEN);
data_cap = 4096;
received = 0;
length = 0;
}
}
#pragma omp section
{
void sig_handler(int signo)
{
char * welcome1 = calloc(strlen(username) + 13, sizeof(char));
strcat(welcome1, username);
strcat(welcome1, " logged out\r\n");
if (send(client_socket, welcome1, strlen(welcome1), 0) < 0)
{
callError("ERROR: cannot send socked");
}
free(welcome1);
}
while (1)
{
if (signal(SIGINT, sig_handler) == SIG_ERR)
printf("\ncan't catch SIGINT\n");
while (1)
sleep(1);
}
}
}
我怎样才能使捕捉信号后程序终止?
谢谢我会尝试它:) – krakra