C 7

[C] 2개의 파이프를 사용한 양방향 통신 프로그램 구현하기

파이프를 이용한 양방향 통신 2개의 파이프를 이용하여 부모와 자식 프로세스 사이에 양방향 통신을 할 수 있는 프로그램을 만들어봅시다. 프로그램의 동작 부모 프로세스는 표준 입력으로 텍스트 데이터를 받는다. 자신이 받은 텍스트를 파이프로 자식에게 전송한다. 자식은 부모가 전송한 텍스트를 받아 모든 문자를 대문자로 변경한다. 부모가 보낸 파이프와 다른 파이프로 부모에게 변경한 결과를 보낸다. 부모는 자식이 반환한 문자열을 화면에 출력하고 다시 루프에서 대기한다. 실행결과 이 프로그램은 영어 문자열을 입력했을 때, 소문자를 대문자로 바꿔준다. #include #include #include #include #include #include #include #include #include #define BUF_S..

C/Linux 2023.01.03

[C] alarm 시그널을 받으면 1초 간격으로 메시지 출력하는 프로그램 구현하기

wake_up() SIGALRM을 받으면 1초 간격으로 "wake up\n"을 출력하는 프로그램을 작성하시오. SIGALRM 시그널의 핸들러가 실행되는 동안 SIGINT를 제외한 모든 시그널을 블럭하시오. #define _GNU_SOURCE #include #include #include #include #include #include #include void mywakeup(int sig) { while (1) { printf("wake up\n"); sleep(1); } } int main(void) { int pid, status, signo; time_t t; sigset_t set; static struct sigaction act; act.sa_handler = mywakeup; sigfill..

C/Linux 2023.01.03

[C] ctrl + c 로 종료되지 않는 프로그램 구현하기

Hello_Again() set이라는 이름의 시그널 세트를 생성하시오. set을 이용하여 프로그램이 ctrl + c로 종료되지 않도록 만드시오. (힌트: sigprocmask를 사용할 것) #define _GNU_SOURCE #include #include #include #include #include int main(void) { int cnt; sigset_t chkset; sigset_t set; sigemptyset(&set); sigaddset(&set, SIGINT); sigprocmask(SIG_SETMASK, &set, NULL); // do not modify cnt = 0; for (;;) { printf("hello\n"); fflush(stdout); sleep(1); cnt++;..

C/Linux 2023.01.03

[C] execve()를 사용하여 execlp() 구현하기

execlp() 구현하기 execve()를 이용하여 execlp()를 구현하시오. 기존 execlp()와 겹치지 않도록 myexeclp() 함수로 구현할 것 가변인자 함수를 사용할 것 execlp()는 인자의 길이가 가변적임 가변적 인자를 처리해주기 위해서는 stdarg(3)이 필요함 인터넷에서 사용 예제를 검색해볼 것 구현의 편의를 위해 인자의 최대 길이는 MAXARGS를 사용할 것 자체 테스트 방법 환경변수 PATH로부터 경로명을 가져와 테스트해 볼 것 파일이 있는지, 그 파일이 실행 가능한지 테스트해야 함 제일 뒤의 경로명부터 테스트해야 함 처음 실행할 수 있는 경로명에 있는 실행파일을 사용할 것 반환 값 실패 시 -1 반환 #define _XOPEN_SOURCE #include #include #..

C/Linux 2023.01.03

[C] chmod a+rX [path] 구현하기

chmod a+rX [path]의 기능모든 읽기 권한을 활성화 한다.디렉토리에는 모든 실행 권한을 활성화 한다.이미 실행 권한이 있는 파일에 대해 모든 실행 권한을 활성화 한다.요구사항chmod a+rX와 동일하게 동작하는 프로그램을 stat()과 chmod()를 이용하여 구현하라.path에는 여러 파일의 이름이 연속으로 입력될 수 있다.처리할 파일의 이름을 커맨드 라인으로부터 입력받을 수 있어야 한다.입력 파일의 이름이 변경되어도 처리할 수 있어야 한다.실행결과 예시#include #include #include #include #include int main(int argc, char **argv) { int return_stat; char *file_name; struct stat file_info..

C/Linux 2023.01.03

[C] copy_file() 구현하기

copy_file() 함수 구현하기 파일을 복사하여 사본을 생성하는 copy_file()함수를 구현하라. low level function, 즉 open(), read(), write(), close()를 이용하여 구현하라. 단, hole이 있는 경우에도 복사할 수 있어야 한다. Prototype int copy_file(const char *src, const char *dst); src는 원본 파일의 이름이다. dst는 사본 파일의 이름이다. 단계별 동작 첫 번째 파일을 개방한다. 두 번째 파일을 생성한다. 첫 번째 파일을 읽어 두 번째 파일에 쓴다. 첫 번째 파일의 끝에 도달할 때까지 3번 동작을 반복한다. 두 파일을 닫는다. #include #include #include #include #def..

C/Linux 2023.01.03