#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include <fcntl.h>
int main(){
int fd1 = open("/Users/mymac/Documents/admin's folder/dd.txt", 0);
int fd2 = creat("/Users/mymac/Documents/admin's folder/copy.txt", 0777);
char buf[0];
int n;
fork();
while((n = read(fd1, buf, 1)) != 0)
write(fd2, &buf, 1);
close(fd1);
close(fd2);
wait(0);
return 0;
했는데 , write부분에서 context switch가 일어난다던데.
sys/call이 끝나서 발생하는건가? 아님 인터럽트가 끝나서 일어나는거임?
전자쪽이 맞는거같은데.
내가 알기론 context.switch가 syscall의 중간(자발), 마지막(자발적), 인터럽트 끝날때(비자발적) 일어나는걸로아는데..
자세히 설명해줄게이
? 저렇게 하면 copy내용이 어떻게됨? 궁금하네
((n = read(fd1, buf, 1)) != 0) 이니까 eof까지 버퍼 1개씩 쓰는거 그냥 똑같이됨 ㅇ
그럼 dd가 asd면 copy는 aassdd?
아 아닌가 뭐지
그냥 카피임~ asd--> asd char 1개씩 받아서 쓰는거임
a 받아쓰고 s받아쓰고 d받아쓰고 다음엔 없으니 eof니 반복문 아웃 ㅇ
아니 씨발 문맥전환이 뭔지 이해는 하고 있는거냐
근데 fork해서 프로세스가 두개잖어 그럼 디스크립터 안꼬이나?
시스템콜이 뭐고 문맥전환이 뭐고 privilege level이 뭐고 하는 개념이해가 제대로 돼있으면 이런 꼴이 안날텐데
이제 공부하는데 뭘 바래여.... 모르니까 질문하지.. 알면 질문하지도않나여
sys/call 해서 kernel모드로 들어가고 나서 다시 user mode로가려니까 발생하는건가.
ㅁㅁ// asd는 안꼬이는데 좀 길면 꼬임~ 왜냐면 critical section 문제 발생함. child하고 parents하고 r/w하다가 개꼬임; ㅋ