Advertisement
Guest User

unix-socket-writer.c

a guest
May 15th, 2012
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <sys/un.h>
  4. #include <sys/sendfile.h>
  5. #include <sys/stat.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <libgen.h>
  9. #include <fcntl.h>
  10. #include <string.h>
  11. #include <errno.h>
  12.  
  13. const struct sockaddr_un sockaddr={
  14.   AF_UNIX,
  15.   "/tmp/unix_socket"
  16. };
  17.  
  18. const char * basename_argv0;
  19. const char filename[]="/etc/bash_completion";
  20.  
  21. int main(int argc, char * const argv[]) {
  22.   int sockfd,fd;
  23.   ssize_t writesize;
  24.   struct stat statbuf;
  25.   int status;
  26.   basename_argv0=basename(argv[0]);
  27.   sockfd=socket(AF_UNIX,SOCK_STREAM,0);
  28.   if (sockfd==-1) {
  29.     fprintf(stderr,"%s: cannot open socket: %s\n",basename_argv0,strerror(errno));
  30.     return (2);
  31.   }
  32.   status=connect(sockfd,(const struct sockaddr *)&sockaddr,sizeof(sockaddr));
  33.   if (status!=0) {
  34.     fprintf(stderr,"%s: cannot connect to socket: %s\n",basename_argv0,strerror(errno));
  35.     return (2);
  36.   }
  37.   fd=open(filename,0);
  38.   if (fd==-1) {
  39.     fprintf(stderr,"%s: %s: %s\n",basename_argv0,filename,strerror(errno));
  40.     return (2);
  41.   }
  42.   status=fstat(fd,&statbuf);
  43.   if (status!=0) {
  44.     fprintf(stderr,"%s: %s: %s\n",basename_argv0,sockaddr.sun_path,strerror(errno));
  45.     return (2);
  46.   }
  47.   writesize=sendfile(sockfd,fd,NULL,statbuf.st_size);
  48.   if (writesize==-1) {
  49.     fprintf(stderr,"%s: cannot write to socket: %s\n",basename_argv0,strerror(errno));
  50.     return (2);
  51.   }
  52.   status=close(sockfd);
  53.   if (status!=0) {
  54.     fprintf(stderr,"%s: cannot close sockfd: %s\n",basename_argv0,strerror(errno));
  55.     return (2);
  56.   }
  57.   return (0);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement