Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include <unistd.h>
  4. #include <arpa/inet.h>
  5.  
  6. #include <stdio.h>
  7. #include <fcntl.h>
  8. #include <string.h>
  9.  
  10. #include <pthread.h>
  11. #include <sys/inotify.h>
  12. #include <dirent.h>
  13.  
  14. #define BUF_LEN (20 * sizeof(struct inotify_event) + 1)
  15. char responseBuffer[2048] = {0};
  16.  
  17.  
  18. void directoryContent(char *content) {
  19.     struct dirent *de;
  20.  
  21.     DIR *dr = opendir(".");
  22.  
  23.     if (dr == NULL) {
  24.         printf("Could not open current directory");
  25.  
  26.     }
  27.  
  28.     memset(content, 0, sizeof(content));
  29.  
  30.     while ((de = readdir(dr)) != NULL) {
  31.         strcat(content, de->d_name);
  32.         strcat(content, "\n");
  33.     }
  34.  
  35.     printf("Directory content:\n");
  36.     printf("%s\n", content);
  37.  
  38.     closedir(dr);
  39. }
  40.  
  41. void *connectionHandler(void *args) {
  42.     int connectionSocket = *((int *) args);
  43.  
  44.     printf("New client thread started\n");
  45.  
  46.     send(connectionSocket, responseBuffer, strlen(responseBuffer), 0);
  47.     close(connectionSocket);
  48. }
  49.  
  50. void display_notification(struct inotify_event *e)
  51. {
  52.     printf("Notification: %d\n", e->mask);
  53.     directoryContent(responseBuffer);
  54. }
  55.  
  56. void *inotifyThread(void *args){
  57.  
  58.     int iFd, wd;
  59.     char buffer[BUF_LEN] = {0};
  60.     iFd = inotify_init();
  61.  
  62.     wd = inotify_add_watch(iFd, ".", IN_CREATE | IN_DELETE | IN_MOVE);
  63.  
  64.     while(1) {
  65.         int nRead = read(iFd, buffer, BUF_LEN);
  66.         struct inotify_event *e = (struct inotify_event *)buffer;
  67.         display_notification(e);
  68.     }
  69. }
  70.  
  71. int main() {
  72. // def. socket
  73. // bind socket
  74. // listen on socket
  75.     struct sockaddr_in serverAddress;
  76.     struct sockaddr_storage clientAddress;
  77.     socklen_t addr_len;
  78.     pthread_t tHandle;
  79.     pthread_t inotifyHandle;
  80.  
  81.     int serverSocket = socket(PF_INET, SOCK_STREAM, 0);
  82.  
  83.     serverAddress.sin_family = AF_INET;
  84.     serverAddress.sin_port = htons(12346);
  85.     serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // localhost
  86.  
  87.     bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress));
  88.  
  89.     printf("Before listen\n");
  90.  
  91.     listen(serverSocket, 100);
  92.  
  93.     printf("After listen\n");
  94.  
  95.     printf("After send\n");
  96.  
  97.     pthread_create(&inotifyHandle, NULL, inotifyThread, NULL);
  98.  
  99.     directoryContent(responseBuffer);
  100.  
  101.     while (1) {
  102.  
  103.         // Wait for client connection
  104.         int clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddress, &addr_len);
  105.  
  106.         pthread_create(&tHandle, NULL, connectionHandler, &clientSocket);
  107.  
  108.         usleep(50000);
  109.     }
  110.  
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement