某天忽然想要用echo/cat的方式直接對unix socket做存取,結果得到error,只好有請google大神,覓得此良方Allow Unix sockets to be treated like normal files,try了一下沒問題。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
int main(int argc, char *argv[])
{
int srv_fd, cli_fd;
socklen_t cli_len;
struct sockaddr_un srv_addr, cli_addr;
char buf[128] = "Brook: ";
ssize_t len;
unlink("server_socket");
if ((srv_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
handle_error("socket");
}
srv_addr.sun_family = AF_UNIX;
strcpy(srv_addr.sun_path, "/tmp/unix_sock");
if (bind(srv_fd, (struct sockaddr *)&srv_addr, sizeof(srv_addr)) < 0) {
handle_error("bind");
}
if (listen(srv_fd, 1) < 0) {
handle_error("listen");
}
while (1) {
cli_fd = accept(srv_fd, (struct sockaddr *)&cli_addr, &cli_len);
len = read(cli_fd, buf + 6, sizeof(buf) - 6);
buf[6 + len] = 0;
write(cli_fd, buf, strlen(buf));
close(cli_fd);
}
return 0;
}
- 參考資料:
- http://lwn.net/Articles/415651/ , net/unix: Allow Unix sockets to be treated like normal files.
github:
https://github.com/brook-kuo/Linux_Module/tree/master/socket/unix_as_normal_file

