c - pthread_create() 的多个参数不起作用
问题描述
使用下面的代码,我尝试进行多线程处理。函数 msg_1 和 msg_2 应该在后台运行,并且应该使用 2 个参数调用它们。使用 conn_1 和 conn_2。但这不起作用。我的编译器给了我这个错误:
/usr/bin/ld: /tmp/cc7J77SE.o: in function `main':
server.c:(.text+0x258): undefined reference to `pthread_create'
/usr/bin/ld: server.c:(.text+0x277): undefined reference to `pthread_create'
collect2: Error: ld returned 1 as exit-code
我无法弄清楚我做错了什么。有人能帮我吗?
节目来源:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#define PORT_CONN1 4444
#define PORT_CONN2 4445
char buf1[1024];
char buf2[1024];
struct arg_struct {
int arg1;
int arg2;
};
void *msg_1(void *arguments) {
struct arg_struct *args = arguments;
while(1) {
recv(args->arg1, &buf1, 1024, 0);
send(args->arg1, buf1, sizeof(buf1), 0);
}
}
void *msg_2(void *arguments) {
struct arg_struct *args = arguments;
while(1) {
recv(args->arg2, &buf2, 1024, 0);
send(args->arg1, buf2, sizeof(buf2), 0);
}
}
int main() {
int sockfd_1, sockfd_2, conn_1, conn_2;
struct sockaddr_in host_addr, client_addr;
socklen_t sin_size;
int recv_length=1, ok=1;
sockfd_1 = socket(PF_INET, SOCK_STREAM, 0);
sockfd_2 = socket(PF_INET, SOCK_STREAM, 0);
setsockopt(sockfd_1, SOL_SOCKET, SO_REUSEADDR, &ok, sizeof(int));
setsockopt(sockfd_2, SOL_SOCKET, SO_REUSEADDR, &ok, sizeof(int));
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons(PORT_CONN1);
host_addr.sin_addr.s_addr = 0;
memset(&(host_addr.sin_zero), "\0", 8);
bind(sockfd_1, (struct sockaddr *)&host_addr, sizeof(struct sockaddr));
host_addr.sin_family = AF_INET;
host_addr.sin_port = htons(PORT_CONN2);
host_addr.sin_addr.s_addr = 0;
memset(&(host_addr.sin_zero), "\0", 8);
bind(sockfd_2, (struct sockaddr *)&host_addr, sizeof(struct sockaddr));
listen(sockfd_1, 5);
listen(sockfd_2, 5);
while(1) {
pthread_t thread1, thread2;
sin_size = sizeof(struct sockaddr_in);
conn_1 = accept(sockfd_1, (struct sockaddr *)&client_addr, &sin_size);
conn_2 = accept(sockfd_2, (struct sockaddr *)&client_addr, &sin_size);
struct arg_struct args;
args.arg1 = conn_1;
args.arg2 = conn_2;
pthread_create(&thread1, NULL, msg_1, (void *)&args);
pthread_create(&thread2, NULL, msg_2, (void *)&args);
pthread_exit(NULL);
close(conn_1);
close(conn_2);
}
}
解决方案
推荐阅读
- java - ZonedDateTime 与时区添加到打印格式
- node.js - expressjs 将控制器对象返回给 res.send
- gstreamer - x264enc 中有质量预设吗?
- java - 对空对象使用“isEmpty()”时如何避免“NullPointerException”
- git - 使用 Git 参考存储库时,我需要对管道代码进行修改吗
- php - mysqli_stmt::bind_param():变量与参数数量不匹配
- java - 如何对通过 Java 中的输入作为字符串接收的 int 数组/列表进行排序
- javascript - 强制下载文件 - 外部 URL
- reactjs -