1 / 7

리눅스 시스템 프로그래밍

리눅스 시스템 프로그래밍. Ex4-7 2002242060 안경환. lockf. 레코드 로킹 기법 중 가장 단순하다 . Int lockf(int fildes, int function, long size) Fildes : 개방된 파일 디스크립터 Function : 실행될 동작을 지정하는 제어값 Size : 사이즈. lockf. F_ULOCK(0) : 이미 lock 된 레코드를 unlocking 한다 . F_LOCK(1) : 배타적으로 사용하기 위해 레코드를 locking 한다 .

Download Presentation

리눅스 시스템 프로그래밍

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. 리눅스 시스템 프로그래밍 Ex4-7 2002242060 안경환

  2. lockf • 레코드 로킹 기법 중 가장 단순하다. • Int lockf(int fildes, int function, long size) • Fildes : 개방된 파일 디스크립터 • Function : 실행될 동작을 지정하는 제어값 • Size : 사이즈

  3. lockf • F_ULOCK(0) : 이미 lock된 레코드를 unlocking 한다. • F_LOCK(1) : 배타적으로 사용하기 위해 레코드를 locking한다. • F_TLOCK(2) : 레코드를 locking하기 전에 테스트를 하 고 locking 한다.이미 lock되어 있으면 호출은 block되지 않고 실패한다. • F_TEST(3) : 다른 lock들을 위해 레코드를 테스트 한다.

  4. 소스 • #include <fcntl.h> • #include <unistd.h> • #include “ex2-3.h” • main(argc, argv) • int argc; • char *argv[]; • { • struct employee record; • struct flock lock; • int fd, open(), pid, getpid(), recnum; • long position; • if((fd = open(argv[1], O_RDWR)) == -1) { • perror(argv[1]); • exit(1); • } • pid = getpid();

  5. 소스 • for(;;) • { • printf("\nEnter record number: "); • scanf("%d",&recnum); • if(recnum < 0) • break; • position = recnum * sizeof(record); • lseek(fd,position, 0); • if(lockf(fd, F_LOCK, sizeof(record)) == -1) { perror(argv[1]); exit(2); } if(read(fd, (char *) &record,sizeof(record)) == 0) { printf("record %d not found\n",recnum); lseek(fd,position, 0); lockf(fd,F_UNLCK, sizeof(record)); continue; }

  6. 소스 printf("Employee: %s, salary: %d\n", record.name, record.salary); record.pid = pid; /* update record */ printf("Enter new salary: "); scanf("%d", &record.salary); lseek(fd, position, 0); write(fd, (char *) &record, sizeof(record)); lseek(fd, position, 0); lockf(fd, F_UNLCK, sizeof(record)); } close(fd); }

More Related