Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <unistd.h>
- #include <arpa/inet.h>
- #include <stdio.h>
- #include <fcntl.h>
- #include <string.h>
- #include <pthread.h>
- #include <sys/inotify.h>
- #include <dirent.h>
- #define BUF_LEN (20 * sizeof(struct inotify_event) + 1)
- char responseBuffer[2048] = {0};
- void directoryContent(char *content) {
- struct dirent *de;
- DIR *dr = opendir(".");
- if (dr == NULL) {
- printf("Could not open current directory");
- }
- memset(content, 0, sizeof(content));
- while ((de = readdir(dr)) != NULL) {
- strcat(content, de->d_name);
- strcat(content, "\n");
- }
- printf("Directory content:\n");
- printf("%s\n", content);
- closedir(dr);
- }
- void *connectionHandler(void *args) {
- int connectionSocket = *((int *) args);
- printf("New client thread started\n");
- send(connectionSocket, responseBuffer, strlen(responseBuffer), 0);
- close(connectionSocket);
- }
- void display_notification(struct inotify_event *e)
- {
- printf("Notification: %d\n", e->mask);
- directoryContent(responseBuffer);
- }
- void *inotifyThread(void *args){
- int iFd, wd;
- char buffer[BUF_LEN] = {0};
- iFd = inotify_init();
- wd = inotify_add_watch(iFd, ".", IN_CREATE | IN_DELETE | IN_MOVE);
- while(1) {
- int nRead = read(iFd, buffer, BUF_LEN);
- struct inotify_event *e = (struct inotify_event *)buffer;
- display_notification(e);
- }
- }
- int main() {
- // def. socket
- // bind socket
- // listen on socket
- struct sockaddr_in serverAddress;
- struct sockaddr_storage clientAddress;
- socklen_t addr_len;
- pthread_t tHandle;
- pthread_t inotifyHandle;
- int serverSocket = socket(PF_INET, SOCK_STREAM, 0);
- serverAddress.sin_family = AF_INET;
- serverAddress.sin_port = htons(12346);
- serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1"); // localhost
- bind(serverSocket, (struct sockaddr *)&serverAddress, sizeof(serverAddress));
- printf("Before listen\n");
- listen(serverSocket, 100);
- printf("After listen\n");
- printf("After send\n");
- pthread_create(&inotifyHandle, NULL, inotifyThread, NULL);
- directoryContent(responseBuffer);
- while (1) {
- // Wait for client connection
- int clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddress, &addr_len);
- pthread_create(&tHandle, NULL, connectionHandler, &clientSocket);
- usleep(50000);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement