Presentation is loading. Please wait.

Presentation is loading. Please wait.

FILE LOCK #include <stdio.h> #include <stdlib.h>

Similar presentations


Presentation on theme: "FILE LOCK #include <stdio.h> #include <stdlib.h>"— Presentation transcript:

1 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, , }; 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"); printf("got lock\n"); printf("Press <RETURN> to release lock: "); fl.l_type = F_UNLCK; /* set to unlock same region */ if (fcntl(fd, F_SETLK, &fl) == -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 Drawbacks
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


Download ppt "FILE LOCK #include <stdio.h> #include <stdlib.h>"

Similar presentations


Ads by Google