?? client.c
字號:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/un.h>#include <string.h>#include <errno.h>#define BUFFER_SIZE 1024int main(int argc, char **argv){ int fd; if (argc < 2) { fprintf(stdout, "Usage: %s <path>\n", argv[0]); exit(1); } // XXX: step 1, socket(); //int socket(int domain, int type, int protocol); if ((fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "socket() failed: %s\n", strerror(errno)); exit(1); } // XXX: step 2, bind() (optional) // XXX: step 3, connect() struct sockaddr_un remote_address;#if 0 struct sockaddr_un { sa_family_t sun_family; char sun_path[108]; }#endif memset(&remote_address, 0, sizeof(remote_address)); remote_address.sun_family = PF_LOCAL; memcpy(remote_address.sun_path, argv[1], strlen(argv[1])); //int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); if (connect(fd, (struct sockaddr *) &remote_address, sizeof(remote_address)) < 0) { fprintf(stderr, "connect() failed: %s\n", strerror(errno)); // FIXME: close(fd); exit(1); } // XXX: step 4, r/w char buffer[BUFFER_SIZE]; ssize_t n;again: //ssize_t read(int fd, void *buf, size_t count); if ((n = read(fd, buffer, BUFFER_SIZE)) < 0) { if (errno == EINTR) { goto again; } else { fprintf(stderr, "read() failed: %s\n", strerror(errno)); // FIXME: close(fd); exit(1); } } else if (n == 0) { fprintf(stdout, "Connection closed by peer.\n"); } else { buffer[n] = '\0'; fprintf(stdout, "read %d bytes from peer: %s\n", n, buffer); } // XXX: step 5, close() close(fd); return 0;}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -