AF_LOCAL
是 Linux 系统中的一个套接字地址族(socket address family),它用于本地进程间通信(IPC)。这个地址族通常与 Unix 域套接字(Unix Domain Sockets)一起使用,允许同一台机器上的进程之间进行高效的数据交换。
以下是一个简单的 Unix 域套接字服务器和客户端的示例代码:
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define SOCKET_PATH "/tmp/my_socket"
int main() {
int sockfd;
struct sockaddr_un addr;
if ((sockfd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_LOCAL;
strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);
unlink(SOCKET_PATH);
if (bind(sockfd, (struct sockaddr*)&addr, sizeof(struct sockaddr_un)) == -1) {
perror("bind");
close(sockfd);
exit(EXIT_FAILURE);
}
if (listen(sockfd, 5) == -1) {
perror("listen");
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Server listening on %s\n", SOCKET_PATH);
// Accept connections and handle them...
close(sockfd);
return 0;
}
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define SOCKET_PATH "/tmp/my_socket"
int main() {
int sockfd;
struct sockaddr_un addr;
if ((sockfd = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(EXIT_FAILURE);
}
memset(&addr, 0, sizeof(struct sockaddr_un));
addr.sun_family = AF_LOCAL;
strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);
if (connect(sockfd, (struct sockaddr*)&addr, sizeof(struct sockaddr_un)) == -1) {
perror("connect");
close(sockfd);
exit(EXIT_FAILURE);
}
// Send/receive data...
close(sockfd);
return 0;
}
通过以上信息,你应该能够理解 AF_LOCAL
及其相关概念,并能够在实际开发中应用它们。
领取专属 10元无门槛券
手把手带您无忧上云