1 / 9

FILE LOCK

#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char *argv[]) { /* l_type l_whence l_start l_len l_pid */ struct flock fl = { F_WRLCK, SEEK_SET, 0, 0, 0 }; int fd; fl.l_pid = getpid();

abe
Download Presentation

FILE LOCK

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char *argv[]) { /* l_type l_whence l_start l_len l_pid */ struct flock fl = { F_WRLCK, SEEK_SET, 0, 0, 0 }; int fd; fl.l_pid = getpid(); if (argc > 1) fl.l_type = F_RDLCK; if ((fd = open("lockdemo.c", O_RDWR)) == -1) { perror("open"); exit(1); } printf("Press <RETURN> to try to get lock: "); getchar(); printf("Trying to get lock..."); if (fcntl(fd, F_SETLKW, &fl) == -1) { perror("fcntl"); exit(1); } printf("got lock\n"); printf("Press <RETURN> to release lock: "); getchar(); fl.l_type = F_UNLCK; /* set to unlock same region */ if (fcntl(fd, F_SETLK, &fl) == -1) { perror("fcntl"); exit(1); } printf("Unlocked.\n"); close(fd); } FILE LOCK

  2. FIFO : speak.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define FIFO_NAME "american_maid" main() { char s[300]; int num, fd; /* don't forget to error check this stuff!! */ mknod(FIFO_NAME, S_IFIFO | 0666, 0); printf("waiting for readers...\n"); fd = open(FIFO_NAME, O_WRONLY); printf("got a reader--type some stuff\n"); while (gets(s), !feof(stdin)) { if ((num = write(fd, s, strlen(s))) == -1) perror("write"); else printf("speak: wrote %d bytes\n", num); } }

  3. FIFO : tick.c #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define FIFO_NAME "american_maid" main() { char s[300]; int num, fd; /* don't forget to error check this stuff!! */ mknod(FIFO_NAME, S_IFIFO | 0666, 0); printf("waiting for writers...\n"); fd = open(FIFO_NAME, O_RDONLY); printf("got a writer:\n"); do { if ((num = read(fd, s, 300)) == -1) perror("read"); else { s[num] = '\0'; printf("tick: read %d bytes: \"%s\"\n", num, s); } } while (num > 0); }

  4. Shared Memory Examples • Refer to class webpage • shm1.c , shm2.c

  5. Semaphore • a special variable (sv) • upon which only two operations are allowed • P(sv) : wait • if sv is greater than zero, decrement sv. • If sv is zero, suspend execution of the process • V(sv) : signal • If some other process has been suspended for waiting sv, make it resume execution • If no process is suspended waiting for sv, increment sv. • They are used to ensure that a single executing process has exclusive access to a resource. • Critical Section • Binary Semaphore

  6. Semaphore semaphore sv = 1; loop forever { P(sv); critical section code; V(sv); non-critical code section }

  7. Example Code : sem1.c Refer to class webpage.

  8. Memory mapped File I/O a segment of virtual memory which has been assigned a direct byte-for-byte correlation with some portion of a file or file-like resource. this correlation between the file and the memory space permits applications to treat the mapped portion as if it were primary memory.

  9. Memory Mapped File I/O • Benefits : better performance • increased I/O performance, especially when used on small files • a system call is orders of magnitude slower than a simple change of program's local memory • Many benefits of virtual memory (e.g. lazy loading for large file, etc) • Drawbacks • Drawbacks of virtual memory (e.g. page fault) • Difficult in handling very large file (bigger than possible maximum memory) ? • Common Use • Process loader to bring executable file into memory

More Related