Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <sys/sendfile.h>
- #include <sys/stat.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <libgen.h>
- #include <fcntl.h>
- #include <string.h>
- #include <errno.h>
- const struct sockaddr_un sockaddr={
- AF_UNIX,
- "/tmp/unix_socket"
- };
- const char * basename_argv0;
- const char filename[]="/etc/bash_completion";
- int main(int argc, char * const argv[]) {
- int sockfd,fd;
- ssize_t writesize;
- struct stat statbuf;
- int status;
- basename_argv0=basename(argv[0]);
- sockfd=socket(AF_UNIX,SOCK_STREAM,0);
- if (sockfd==-1) {
- fprintf(stderr,"%s: cannot open socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- status=connect(sockfd,(const struct sockaddr *)&sockaddr,sizeof(sockaddr));
- if (status!=0) {
- fprintf(stderr,"%s: cannot connect to socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- fd=open(filename,0);
- if (fd==-1) {
- fprintf(stderr,"%s: %s: %s\n",basename_argv0,filename,strerror(errno));
- return (2);
- }
- status=fstat(fd,&statbuf);
- if (status!=0) {
- fprintf(stderr,"%s: %s: %s\n",basename_argv0,sockaddr.sun_path,strerror(errno));
- return (2);
- }
- writesize=sendfile(sockfd,fd,NULL,statbuf.st_size);
- if (writesize==-1) {
- fprintf(stderr,"%s: cannot write to socket: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- status=close(sockfd);
- if (status!=0) {
- fprintf(stderr,"%s: cannot close sockfd: %s\n",basename_argv0,strerror(errno));
- return (2);
- }
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement