일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- k8s #kubernetes #쿠버네티스
- mp4fpsmod
- JanusWebRTC
- 티스토리챌린지
- JanusGateway
- Value too long for column
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- PytestPluginManager
- 오블완
- table not found
- 자원부족
- Spring Batch
- JanusWebRTCGateway
- preemption #
- PersistenceContext
- 겨울 부산
- VARCHAR (1)
- python
- terminal
- vfr video
- tolerated
- 코루틴 빌더
- 코루틴 컨텍스트
- 깡돼후
- taint
- 달인막창
- kotlin
- 개성국밥
- pytest
- JanusWebRTCServer
목록Unix (12)
너와 나의 스토리
IPC (Inter-Process communication) 같은 시스템 내의 프로세스들끼리 정보를 공유하는 메커니즘을 제공 * 외부 프로세스들끼리 통신은 소켓을 주로 사용 Permission structure IPC 객체가 만들어지면, 시스템은 IPC facility의 status 구조체를 만든다. effective user-id, group-id는 mode와 함께 접근 권한을 결정한다. umask 값은 IPC facility가 만들어질 때 영향을 미치지 않는다. msgctl, semctl, shmctl을 호출해서 udi, gid, mode를 수정할 수 있다. Identifiers and Keys Key IPC 객체의 외부 이름 IPC 구조가 만들어질 때마다(msgget, semget, shmget을 ..
Pipes 가장 간단한 유닉스 interprocess communication(IPC) 메커니즘이다. 프로세스들끼리 파일 공유하는 방식(단방향으로) special file로 나타낸다 예) $ who | wc -l $ who | wc -l -> who 명령어로 인해 나오는 출력 값을 wc -l의 입력으로 넣음 즉, [who]에서 출력 값을 pipe에 write하고, [wc -l]는 pipe에 있는 데이터를 read 함 * [who], [wc -l], [wc -L] 단독 실행한 결과 pipe() system call First-in-first-out 방식 이러한 순서는 'lseek'로 대체 불가능하다 -> pipe에서 작동 안 함 두 가지 제약 단방향(half duplex) 통신 pipe는 부모와 자식 사이..
Signal Concepts kernel에서 발생하는 일: 커널은 키보드 입력으로부터 인터럽트 캐릭터를 확인하고 SIGINT라고 불리는 시그널을 (foreground group인)모든 프로세스들에게 보낸다 cc가 시그널을 받으면, sigint와 연관된 디폴트 액션을 수행하고 종료한다. 시그널은 소프트웨어 인터럽트이다 시그널은 비동기식 이벤트를 다루는 방법을 제공한다. 시그널은 에러가 아니므로 에러처리와 혼동하지 말아야 한다. 프로세스는 시그널을 받으면 시그널을 처리하기 위한 액션을 취해야 한다. 모든 시그널은 이름을 가지며, 이 이름은 SIG-로 시작한다 이 이름은 헤더에 양수인 상수로 정의된다 signal SIGABRT: abort 함수(비정상 종료)를 호출함으로써 생성됨. 호출 프로세스 자기 자신에게..
기본적인 fork() 실습 UID: 프로세스를 실행 시킨 프로세스의 소유자를 의미 PID: 실행된 프로세스에 부여된 숫자 PPID: 부모 프로세스의 PID // fork.c #include #include int main(int argc, char **argv) { pid_t pid; printf("Calling fork()\n"); pid=fork(); if(pid>0) // 부모 printf("Parent PIDs : %d, %d, %d\n",pid,getpid(),getppid()); else if(pid==0) // 자식 printf("Child PIDs : %d, %d, %d\n",pid,getpid(),getppid()); else printf("fork() error.\n"); return ..
sys/stat.h 파일의 상태에 대한 정보를 얻거나 설정 해당 파일에 저장된 디바이스 번호, inode 번호, mode 등 실습: 헤더를 사용해서 파일 state를 출력해보자 #include #include int main(int argc,char* argv[]) { struct stat buf; if(argc>1) { printf("Arguments is not allowed! \n"); return 1; } printf("argv[0]: %s \n", argv[0]); stat(argv[0],&buf); printf("Mode: %lo \n", (unsigned long)buf.st_mode); // 파일의 타입과 permission printf("UID: %d \n", (int)buf.st_uid..
3.1 Files in a multi-user environment Users and ownerships UNIX 시스템의 모든 파일은 시스템의 사용자 중 한명이 소유하고 있다. 소유자는 보통 파일을 만든 유저이다. 소유자의 실제 identity user-id (uid) uid는 특정 유저네임과 연관된다. Users and ownerships 각 유닉스 프로세스는 보통 프로세스를 시작한 유저의 uid와 관련된다. 파일이 만들어질 때, 시스템은 프로세스를 만든 uid를 참조하여 소유권을 설립한다. 소유권 변경 superuser 또는 파일의 소유자 superuser(username=root, uid=0) group 각 user는 한 개 이상의 group에 속한다. /etc/group에서 정의됨 그룹의 실제적..
사용자 및 그룹 확인 getuid(): 사용자의 '실제' ID 출력 geteuid(): 사용자의 '유효' ID 출력 getgid(): 사용자의 '실제' 그룹 ID 출력 getegid(): 사용자의 '유효' 그룹 ID 출력 실제 ID: 프로그램의 실행을 명령하는 ID 유효 ID: 프로그램을 실제로 수행하는 ID "chmod +s"로 유효 ID 우회가 가능하다. //$ vim uid.c #include #include int main(){ printf("UID : %d, EUID: %d\n", getuid(), geteuid()); printf("GID : %d, EGID: %d\n", getgid(), getegid()); return 0; } 실행 확인 유저 (그룹) 추가 / 제거 / 변경 1. 먼저 R..
System call 프로그램과 커널 사이를 연결하는 API windows에도 system call이 있다. unistd.h & fcntl.h unistd.h Unix Standard Header Unix 시스템 호출 전반을 담당하는 헤더 파일 사용자,그룹 ID 획득 파일 및 장치 읽기/쓰기 프로세스 복제 파이프 그 외 다수의 시스템 호출 fcntl.h File Control Header Unix 시스템 중 파일을 담당하는 헤더 파일 파일 생성 파일 속성 변경 파일 열기 및 생성 C 언어: fopen() FILE* fp=fopen("input.txt","w+"); 반환되는 값: 파일 포인터 Unix 호출: open() int fd = open("input.txt",O_RDWR); 반환되는 값: 정수로 표..