월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
./stat 파일이름
./stat 파일이름을 넣어도 파일 사이즈가 96으로 고정, 출력도 ???만 뜨는데 혹시 왜 그런걸 까요?int main(int argc, char **argv){ struct stat statbuf; if (argc < 2) { printf("usage: %s filename\n", argv[0]); return -1; } if (stat(argv[1], &statbuf)) { printf("stat() fail\n"); return -1; } printf("filename: %s\n", argv[1]); printf("size: %ld\n", statbuf.st_size); if (S_ISDIR(statbuf.st_mode)) { printf("it is directory\n"); } else if (S_ISREG(statbuf.st_mode)) { printf("it is regular file\n"); } else { printf("???\n"); } return 0;}
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
fopen r, r+모드 차이
파일포지션 - 라이브 프로그래밍 강의에서 ftell로 파일 디스크립터 포인터 위치를 찍는 실습을 하는데, r 모드로 열고 찍었을 때와 r+모드로 찍었을 때마지막 offset 결과가 54, 60으로 다르게 나옵니다..이유를 설명해주실 수 있으신가요? 영상위치 - 15분
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?
강의를 수강하고 익히는 것도 좋지만,온전히 제 것으로 만들고 써먹기 위해서는 종합할 수 있는 프로젝트나 과제가 있으면 좋다고 생각합니다! 혹시 강의와 관련된 내용으로 구현해 볼 만한 과제가 있을까요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
pthread 질문
안녕하세요 수강생입니다.pthread예제 코드 중 문의사항이 있습니다.출력 화면에서 어떨 때는 trying to join id XXX가 먼저 나오고 어떨 때는 child pthread id XXX가 먼저 나오는데요.그것은 스레드에 연결된 함수의 프린터문과 메인 함수의 프린터문의 출력 타이밍이 서로 달라 랜덤하게 순서가 배치되는 것 인가요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
I/O Multiplexing(select) 질문
안녕하세요 수강생입니다예제 코드에서, select함수와 read함수 둘 다 ret로 값을 반환 받는다고 표현되어 있는데요, 해당 변수가 같은걸 써야되는건 아닌거죠? 즉 각각 다른 변수를 사용해도 상관없는거죠?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
inotify.c. ret 질문
안녕하세요 수강생입니다.ret -= (sizeof(struct inotify_event) + event->Len) 가 0이 된다는 의미가, ret에 누적된 event가 모두 소거된다는 의미인가요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
inotify.c 질의합니다.
inotify.c의 아래 코드부분에서 event = (struct inotify_event )((char )event + sizeof(struct inotify_event) + event->len);ret -= sizeof(struct inotify_event) + event->len;아래와 같이 ret 길이를 빼는 부분이 먼저 가야되지 않을까요?ret -= sizeof(struct inotify_event) + event->len;event = (struct inotify_event )((char )event + sizeof(struct inotify_event) + event->len);
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
child process
child의 종료처리를 한다는 것이 단지 부모가 (wait를 사용해)자식보다 늦게 죽으면 되는건가요?아니면 wait()에서 시그널을 받을때까지 blocking하는 것 말고 하는 다른 종료처리가 있나요?부모가 죽으면 child 프로세스의 자원을 회수하지 못하는 이유가 무엇인가요?
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
read/blocking
read()는 한개의 event만 발생해도 blocking에서 빠져나오지 않나요?? while(ret>0)안에서 여러개의 event를 출력하는 경우가 생기나요?
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
flock
flock함수는 주로 어떻게 사용되나요?
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
system call
file lowlevel 부분에서 나온 함수들만 systemcall이고 file advanced 수업에서 소개되는 api들은 아닌거 맞나요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?
#include<stdio.h>#include<stdlib.h>#include"pthread.h"void thread(void vargp);void main(){ pthread_t tid; pthread_create(&tid,NULL,thread,NULL); //pthread_join(tid,NULL); printf("End of main\n"); exit(0);}void thread(void vargp){ printf("thread is created!:%lu\n",pthread_self()); return NULL;} 결과가 3가지로 나타납니다.End of main End of mainthread is created!:thread is created!:140319790982912 End of mainthread is created!:140328472020736thread is created!:140328472020736
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
fork() 함수 사용시 결과 관련 질문
안녕하세요다음의 소스코드를 실행 했을 시 ... child process 에서 who 명령 실행 했을 때 ..마지막에 새로운 프롬프트가 안 뜬 상태로 되는거죠? #include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>int main() { pid_t pid; switch (pid = fork()) { case -1 : /* fork failed */ perror("fork"); exit(1); break; case 0 : /* child process */ printf("--> Child Process\n"); if (execl("/usr/bin/who", "who", (char *)NULL) == -1) { perror("execl"); exit(1); } exit(0); break; default : /* parent process */ printf("--> Parent process\n"); break; } printf("End of fork\n"); return 0;}
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
exec 관련 궁금한 사항
시스템 프로그램밍 이론 실습 열심히 듣고 있습니다.fork(), exec() 관련 강의를 듣고 문의 사항이 있어서..exec 계열을 실습 예제에서 ls 관련 내용을 예시로 설명되어 있는데이해는 한 것 같은데... 이걸 어떻게 프로그램에 써먹지 ? 하는 의문이 생기더군요exec 사용해서 리눅스 명령어를 쓰는 것으로 활용될 리는 없는데.... 그래서 생각을 한 건데요..별도의 C로(꼭 C 로 짤 필요는 없는 것 같고) 어떤 동작을 하는 실행파일 만들고execl 의 인수를 넣을 때 이 실행 파일을 등록하면 작동하지 않을까 생각을 해서 해보았는데되더군요. ㅎㅎㅎㅎ( 이전 강의에 작성한 "epoll" 실행파일을 등록 해봄)ret = execl("../lec13/epoll","./epoll",NULL);ret = execl("../lec13/epoll","epoll",NULL);ret = execl("../lec13/epoll",argv[0],NULL); 저는 이렇게 이해 했는데 exec 계열은 이런 식으로 사용하는 것이 맞는 건지 여쭤봅니다.아니면 다른 사용법이 있는 건지... 그리고ret = execl("../lec13","epoll",NULL);ret = execl("../lec13/","epoll",NULL);이런식으로 사용하니까.. 에러가 발생하는데요..제가 execl( const char *pathname ....) 잘못 이해 하고 있는 것 같은데... -- error message--root@mmsr:/home/chowork/c_folder/sys_prg/lec15# ./exec_tmporigin process pid: 516153parent process pid: 516153, child process: 516154this is a test function(pid 516153)child process pid: 516154execl() error: Permission deniedchild 516154 returned 255
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
파일 디스크립터와 FILE 구조체에 대한 질문
리눅스는 모든 것을 파일로 관리한다고 알고 있습니다. (장치나 소켓 등도 포함)파일 디스크립터는 파일의 추상화 개념으로 알고 있는데, 지금 이 강의를 보니까 파일 디스크립터를 주고 파일 포인터를 받아오는데, 그러면 리눅스에서 파일이나 장치는 전부 각자의 파일 구조체를 가지고 있다고 이해해도 될까요?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
buf 선언에 따른 read() fail 문제
위와 같이 calloc을 이용해서 buf를 선언할 경우 read() fail 문제가 발생하는데, 교수님의 코드와 같이 정적 어레이로 선언하면 코드가 정상적으로 돌아가는 것을 확인했습니다. 혹시 calloc으로 설정하면 안되는 이유가 있는지 여쭤보고 싶습니다.
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님. 좋은 강의 잘 듣고 있습니다. 다름이 아니라 "파일 이벤트 - 라이브 프로그래밍" 에서 질문이 있습니다. 라이브 코딩을 해주시는 중에 파일 생성 삭제에 대한 이벤트 로그 출력 부분을 작성 해주셨는데요. inotify_event 포인터로 선언되어있는 event 변수를 (char *)로 캐스팅 하는 이유에 대해서 문의 드립니다. 해당 부분의 소스는 아래와 같습니다. 감사합니다. while(ret > 0){ if(event->mask & IN_CREATE) { printf("file %s is created\n",event->name); } if(event->mask & IN_DELETE){ printf("file %s is deleted\n",event->name); } ret -= (sizeof(struct inotify_event) + event->len); event = (struct inotify_event *)((char *)event + sizeof(struct inotify_event) + event->len); <-- (char *)? }
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
2번 multi thread 방법 질문
각각의 thread가 다른 fd를 read하기에 blocking 영향을 받지 않는다로 이해했습니다.그런데 fd가 사용하는 read API 동시에 여러개 사용되지 못하기 때문에 동일한 디바이스 드라이버의 read함수를 사용한다면 결국은 한번에 하나의 fd만 읽을 수 있는 것 아닌가여?
- 미해결리눅스 시스템 프로그래밍 - 이론과 실습
segmentation fault 발생 관련 문의
안녕하세요? 실습 중에 궁금한 점이 생겨 아래와 같이 문의를 남깁니다. 라즈베리파이4 라즈비안 환경에서 inotify.c 파일을 컴파일하였습니다. 컴파일된 실행 파일을 실행 후, watch로 지정한 directory에 파일을 생성하니, "file (file name) is created"라는 문자열이 출력되고 바로 segmentation fault가 발생했습니다. 1. 확인해보니 read로 읽은 buf 내용을 모두 출력하는 while문의 마지막 행에서 ret 값을 (sizeof(struct inotify_event) + event->len) 길이만큼 감소시키는데, 바로 윗 행에서 event 포인터 값을 미리 변경하기 때문에 event->len의 값이 실제로 방금 읽은 데이터의 길이가 아닌 다른 곳을 가리키고 있어서, 모든 데이터를 읽었음에도 while문에서 빠져나오지 못하고 event가 가리키는 필드를 읽으려고 해서 발생하는 문제이지 않았을까 생각했습니다. 그래서 while문 마지막 2줄의 위치를 변경하니 segmentation fault가 발생하지 않고 파일 생성 및 삭제 이벤트를 정상적으로 출력하는 것을 확인할 수 있었습니다. 하지만 강사님의 라이브 프로그래밍에서는 이러한 문제가 발생하지 않는 것을 보니, 제가 잘못 하고 있는것이 있지 않을까 싶어 문의드립니다. 2. 그리고 파일 생성 이벤트를 정상적으로 read했을 때, 생성한 file 이름의 길이에 상관없이 event->len이 16으로 고정되어 출력됩니다만, 이것은 라즈비안 커널에서 고정을 해 놓았을까요? 이상입니다. 감사합니다.
- 해결됨리눅스 시스템 프로그래밍 - 이론과 실습
라이브 코딩 실습 코드
혹시 시스템 프로그래밍 수업에서 라이브 코딩 실습 코드는 따로 제공되는 파일이 없나요? 직접 작성해야할까요?