Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d02b04c

Browse files
committed
#B19 code fix
1 parent 029c7f5 commit d02b04c

File tree

9 files changed

+892
-80
lines changed

9 files changed

+892
-80
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#include <stdio.h>
2+
#include <unistd.h>
3+
4+
5+
int main(void)
6+
{
7+
while(1)
8+
sleep(1);
9+
}

‎기본과제/#B19_461_20162448/소스코드/ssu_closeonexec_3.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ int main(void)
1414
exit(1);
1515
}
1616

17-
printF("CLOSE ON EXEC flag is = %d\n", flag);
17+
printf("CLOSE ON EXEC flag is = %d\n", flag);
1818
exit(0);
1919
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
#define NAME_SIZE 64
1+
#define NAMESIZE 50
22

33
struct ssu_employee{
4-
char name [NAME_SIZE];
5-
int pid;
4+
char name[NAMESIZE];
65
int salary;
6+
int pid;
77
};

‎기본과제/#B19_461_20162448/소스코드/ssu_fcntl_8.c‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,23 @@ int main(int argc, char *argv[]){
1515
exit(1);
1616
}
1717

18-
if((fd = open(argv[1], O_RDWR)) < 0){ // open record file
18+
// 인자로 받은 레코드 파일을 읽기 쓰기 모드로 열기
19+
if((fd = open(argv[1], O_RDWR)) < 0){
1920
fprintf(stderr, "open error for %s\n", argv[1]);
2021
exit(1);
2122
}
2223

23-
if((flags = fcntl(fd, F_GETFL, DUMMY)) == -1){ // get file flags
24+
// 파일 플래그 획득
25+
if((flags = fcntl(fd, F_GETFL, DUMMY)) == -1){
2426
fprintf(stderr, "fcntl F_GETFL error\n");
2527
exit(1);
2628
}
2729

28-
flags |= O_APPEND; // add Append flag
30+
// 플래그 추가
31+
flags |= O_APPEND;
2932

30-
if(fcntl(fd, F_SETFL, flags) == -1){ // set flags
33+
// 플래그 설정
34+
if(fcntl(fd, F_SETFL, flags) == -1){
3135
fprintf(stderr, "fcntl F_SETFL error\n");
3236
exit(1);
3337
}
@@ -51,6 +55,6 @@ int main(int argc, char *argv[]){
5155
exit(1);
5256
}
5357
}
54-
close(fd); // close file descriptor
58+
close(fd);
5559
exit(0);
5660
}

‎기본과제/#B19_461_20162448/소스코드/ssu_fcntl_lock1.c‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <unistd.h>
44
#include <error.h>
55
#include <fcntl.h>
6+
#include <errno.h>
67

78
#define NAMESIZE 50
89
#define MAXTRIES 5
@@ -34,7 +35,7 @@ int main(int argc, char *argv[])
3435
lock.l_len = 0L;
3536

3637
while(fcntl(fd, F_SETLK, &lock) == -1) { // read lock 설정
37-
if(errno == EACCESS) { // 에러 발생시
38+
if(errno == EACCES) { // 에러 발생시
3839
if(try++ < MAXTRIES) { // 5번 다시 시도
3940
sleep(1); // 1초 대기
4041
continue;
@@ -47,7 +48,8 @@ int main(int argc, char *argv[])
4748
}
4849

4950
sum = 0;
50-
while(read(fd, (char *)&record, sizeof(record)) > 0) {
51+
fseek(fd, 0, SEEK_SET);
52+
while(read(fd, (char*)&record, sizeof(record)) > 0) {
5153
printf("Employee: %s, Salary: %d\n", record.name, record.salary);
5254
sum += record.salary;
5355
}

‎기본과제/#B19_461_20162448/소스코드/ssu_fcntl_lock2.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include <errno.h>
55
#include <fcntl.h>
66

7-
int main(intargc, char *argv[])
7+
int main(intargc, char *argv[])
88
{
99
struct flock lock;
1010
int fd;

‎기본과제/#B19_461_20162448/소스코드/ssu_fcntl_lock3.c‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct employee {
1313

1414
int main(int argc, char *argv[])
1515
{
16-
struct flcok lock;
16+
struct flock lock;
1717
struct employee record;
1818
int fd, recnum, pid;
1919
long position;
@@ -37,15 +37,21 @@ int main(int argc, char *argv[])
3737
lock.l_start = position;
3838
lock.l_len = sizeof(record);
3939
// write lock 설정
40-
if(fcntl(fd, (char*)&record, sizeof(record)) == 0) {
40+
if(fcntl(fd, F_SETLKW, &lock) == -1) {
41+
perror(argv[1]);
42+
exit(2);
43+
}
44+
lseek(fd, position, 0);
45+
if(read(fd, (char*)&record, sizeof(record)) == 0) {
4146
printf("record %d not found\n", recnum);
4247
// write lock 해제
4348
lock.l_type = F_UNLCK;
4449
fcntl(fd, F_SETLK, &lock);
50+
continue;
4551
}
4652
printf("Employee: %s, salary: %d\n", record.name, record.salary);
4753
record.pid = pid;
48-
printF("Enter new salary: ");
54+
printf("Enter new salary: ");
4955
scanf("%d", &record.salary);
5056
// 파일의 해당 오프셋 이동
5157
lseek(fd, position, 0);

‎기본과제/#B19_461_20162448/소스코드/ssu_fcntl_lock4.c‎

Lines changed: 66 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -6,80 +6,81 @@
66
#define NAMESIZE 50
77

88
struct employee {
9-
char name[NAMESIZE];
10-
int salary;
11-
int pid;
9+
char name[NAMESIZE];
10+
int salary;
11+
int pid;
1212
};
1313

1414
int main(int argc, char *argv[])
1515
{
16-
struct flcok lock;
17-
struct employee record;
18-
int fd, recnum, pid;
19-
long position;
20-
char ans[5];
16+
struct flock lock;
17+
struct employee record;
18+
int fd, recnum, pid;
19+
long position;
20+
char ans[5];
2121

22-
// 인자로 입력받은 파일 읽기쓰기 모드로 열기
23-
if((fd = open(argv[1], O_RDWR)) == -1) {
24-
perror(argv[1]);
25-
exit(1);
26-
}
22+
// 인자로 입력받은 파일 읽기쓰기 모드로 열기
23+
if((fd = open(argv[1], O_RDWR)) == -1) {
24+
perror(argv[1]);
25+
exit(1);
26+
}
2727

28-
pid = getpid(); // pid 획득
29-
for(;;) {
30-
printf("\nEnter record number: ");
31-
scanf("%d", &recnum);
32-
if(recnum < 0)
33-
break;
34-
position = recnum * sizeof(record);
35-
// lock 상태 초기화
36-
lock.l_type = F_WRLCK;
37-
lock.l_whence = 0;
38-
lock.l_start = position;
39-
lock.l_len = sizeof(record);
28+
pid = getpid(); // pid 획득
29+
for(;;) {
30+
printf("\nEnter record number: ");
31+
scanf("%d", &recnum);
32+
if(recnum < 0)
33+
break;
34+
position = recnum * sizeof(record);
35+
// lock 상태 초기화
36+
lock.l_type = F_WRLCK;
37+
lock.l_whence = 0;
38+
lock.l_start = position;
39+
lock.l_len = sizeof(record);
4040

41-
if(fcntl(fd, F_SETLKW, &lock) == -1)
42-
perror(argv[1]);
43-
exit(2);
44-
}
41+
if(fcntl(fd, F_SETLKW, &lock) == -1) {
42+
perror(argv[1]);
43+
exit(2);
44+
}
4545

46-
// 파일의 해당 오프셋 이동
47-
lseek(fd, position, 0);
48-
if(read(fd, (char*)&record, sizeof(record)) == 0) {
49-
printF("record %d not found\n", recnum);
50-
// write lock 해제
51-
lock.l_type = F_UNLCK;
52-
fcntl(fd, F_SETLK, &lock);
53-
continue;
54-
}
55-
printf("Employee: %s, salary: %d\n", record.name, record.salary);
56-
printf("Do you want to update salary (y or n)? ");
57-
scanf("%s", ans);
5846

59-
// write lock 해제
60-
if(ans[0] != 'y') {
61-
lock.l_type = F_UNLCK;
62-
fcntl(fd, F_SETLK, &lock);
63-
continue;
64-
}
47+
// 파일의 해당 오프셋 이동
48+
lseek(fd, position, 0);
49+
if(read(fd, (char*)&record, sizeof(record)) == 0) {
50+
printf("record %d not found\n", recnum);
51+
// write lock 해제
52+
lock.l_type = F_UNLCK;
53+
fcntl(fd, F_SETLK, &lock);
54+
continue;
55+
}
56+
printf("Employee: %s, salary: %d\n", record.name, record.salary);
57+
printf("Do you want to update salary (y or n)? ");
58+
scanf("%s", ans);
6559

66-
// write lock 설정
67-
lock.l_type=F_WRLCK;
68-
if(fcntl(fd, F_SETLKW, &lock) ==-1) {
69-
perror(argv[1]);
70-
exit(3);
71-
}
60+
// write lock 해제
61+
if(ans[0] !='y') {
62+
lock.l_type=F_UNLCK;
63+
fcntl(fd, F_SETLK, &lock);
64+
continue;
65+
}
7266

73-
record.pid = pid;
74-
printf("Enter new salary: ");
75-
scanf("%d", &record.salary);
76-
// 파일의 해당 오프셋 이동
77-
lseek(fd, position, 0);
78-
// 파일에 쓰기
79-
write(fd, (char*)&record, sizeof(record));
80-
// write lock 해제
81-
lock.l_type = F_UNLCK;
82-
fcntl(fd, F_SETLK, &lock);
83-
}
84-
close(fd);
67+
// write lock 설정
68+
lock.l_type = F_WRLCK;
69+
if(fcntl(fd, F_SETLKW, &lock) == -1) {
70+
perror(argv[1]);
71+
exit(3);
72+
}
73+
74+
record.pid = pid;
75+
printf("Enter new salary: ");
76+
scanf("%d", &record.salary);
77+
// 파일의 해당 오프셋 이동
78+
lseek(fd, position, 0);
79+
// 파일에 쓰기
80+
write(fd, (char*)&record, sizeof(record));
81+
// write lock 해제
82+
lock.l_type = F_UNLCK;
83+
fcntl(fd, F_SETLK, &lock);
84+
}
85+
close(fd);
8586
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /