본문 바로가기

전체 글

(68)
파이프 구조 및 여러개의 파이프 연결방법 파이프를 닫을 때 이렇게 하는 이유는 다음과 같습니다:리소스 관리: 파일 디스크립터는 제한된 시스템 리소스입니다. 사용이 끝난 파이프를 닫음으로써 이 리소스를 해제하고 다른 프로세스나 같은 프로세스의 다른 부분에서 사용할 수 있게 합니다.  데이터 흐름 제어: 파이프의 읽기 끝(tube)과 쓰기 끝(tube)을 모두 닫음으로써, 파이프를 통한 데이터 전송이 완전히 종료되었음을 시스템에 알립니다.  EOF (End of File) 시그널링: 파이프의 쓰기 끝을 닫으면, 읽기 측에서 EOF를 감지할 수 있습니다. 이는 데이터 전송의 완료를 나타내는 중요한 신호입니다.  메모리 누수 방지: 열린 파일 디스크립터를 닫지 않으면 메모리 누수가 발생할 수 있습니다. 이 함수는 두 파이프 끝을 모두 닫아 이를 방지합..
access, dup, dup2, execve, fork, pipe, unlink, wait, waitpid, perror, strerror 함수 설명 C 언어에서 사용되는 주요 시스템 호출 함수들에 대해 상세히 설명하겠습니다. ## access() `access()` 함수는 파일이나 디렉토리에 대한 접근 권한을 확인하는 데 사용됩니다. ```c int access(const char *pathname, int mode); ``` - `pathname`: 접근 권한을 확인할 파일 또는 디렉토리의 경로 - `mode`: 확인할 접근 모드 (R_OK, W_OK, X_OK, F_OK)  access 함수에서 두 번째 인자는 파일이나 디렉토리에 대한 접근 권한을 확인하기 위해 사용되는 모드 플래그입니다. 이 플래그는 특정 권한을 나타내는 상수로 정의되어 있으며, 각각의 상수는 특정한 정수 값을 가집니다. 다음은 access 함수에서 사용되는 주요 상수와 그 숫..
파이프 구조체 설명 이 구조체는 파이프(pipe)를 사용한 프로세스 간 통신을 구현하는 데 필요한 여러 요소들을 포함하고 있습니다. pid_t pid1, pid_t pid2: 두 개의 프로세스 ID를 저장합니다. 이는 fork()로 생성된 자식 프로세스들의 ID를 저장하는 데 사용됩니다int tube[2]: 파이프를 위한 파일 디스크립터 배열입니다. pipe() 함수로 생성된 파이프의 읽기/쓰기 끝을 저장합니다.int infile, int outfile: 입력 파일과 출력 파일의 파일 디스크립터를 저장합니다.char *paths: 환경 변수 PATH의 내용을 저장하는 문자열 포인터입니다.char **cmd_paths: 명령어의 가능한 경로들을 저장하는 문자열 배열의 포인터입니다.char **cmd_args: 명령어와 그 인..
d->cmd_options = ft_split(d->av[d->child + 2 + d->heredoc], ' '); d->cmd_options = ft_split(d->av[d->child + 2 + d->heredoc], ' '); 부분은 명령어를 분리하여 cmd_options에 저장하는 역할을 합니다. 이 코드의 각 요소를 상세히 설명하겠습니다.코드 분석d->av:d->av는 프로그램의 인수(arguments)를 저장하는 배열입니다. 일반적으로 argv와 유사한 역할을 하며, 명령어와 그에 대한 인수를 포함합니다.예를 들어, 프로그램이 ./pipex cmd1 arg1 | cmd2 arg2와 같이 실행되었다면, d->av는 다음과 같은 값을 가질 수 있습니다:d->av[0] = ./pipexd->av[1] = cmd1d->av[2] = arg1d->av[3] = |d->av[4] = cmd2d->av[5] = arg..
자식프로세스와 부모 프로세스의 관계 child와 parent의 관계child 프로세스:d->child는 현재 생성 중인 자식 프로세스의 인덱스를 나타냅니다. 이 값은 0부터 시작하여 d->nb_cmds (명령어의 개수)보다 작을 때까지 증가합니다.fork() 호출 후, 자식 프로세스는 d->pids[d->child] == 0 조건을 만족하게 됩니다. 이 경우, child(d) 함수를 호출하여 자식 프로세스의 작업을 수행합니다. 자식 프로세스는 주로 명령어를 실행하는 역할을 합니다.parent 프로세스:parent(d) 함수는 모든 자식 프로세스가 생성된 후 부모 프로세스에서 호출됩니다. 이 함수는 자식 프로세스의 종료를 기다리거나, 자식 프로세스의 결과를 처리하는 등의 작업을 수행합니다.부모 프로세스는 fork() 호출 후, 자식 프로세스..
pipe 함수 사용법 pipe(d->pipe):pipe 함수는 두 개의 파일 디스크립터를 생성하여 파이프를 만듭니다. 이 파이프는 프로세스 간의 통신을 가능하게 합니다.d->pipe는 t_data 구조체의 멤버로, 파이프의 읽기 및 쓰기 파일 디스크립터를 저장하는 배열입니다. 일반적으로 d->pipe[0]은 읽기용, d->pipe[1]은 쓰기용으로 사용됩니다.== -1:pipe 함수가 실패하면 -1을 반환합니다. 따라서 이 조건문은 파이프 생성이 성공했는지 확인합니다.exit_error(...):exit_error는 오류가 발생했을 때 호출되는 함수입니다. 이 함수는 프로그램을 종료하고, 오류 메시지를 출력하는 역할을 합니다.이 함수에 전달되는 인자는 오류 메시지와 관련된 정보입니다.msg("pipe", ": ", strer..
here_doc 모드로 사용자 입력 받기 이 사용법 메시지는 pipex 프로그램의 "here_doc" 모드 실행 방법을 남깁니다.구성 요소 설명 ./pipex: 실행할 프로그램의 이름입니다. here_doc: 프로그램을 here document 모드로 실행하라는 옵션입니다.  LIMITER: here document의 끝을 나타내는 구분자입니다.  cmd1 cmd2 ... cmdn: 실행할 명령어들입니다. 최소 두 개의 명령어가 필요하며, 더 많은 명령어를 사용할 수 있습니다.  file2: 최종 출력이 저장될 파일명입니다.  동작 방식 프로그램은 표준 입력에서 텍스트를 읽기 시작합니다. LIMITER와 일치하는 줄을 만날 때까지 입력을 계속 읽습니다. 읽은 내용을 첫 번째 명령어(cmd1)의 입력으로 전달합니다. 각 명령어의 출력은 파이프를 ..
< infile ls -l | wc -l >outfile 이 명령어는 파일 시스템 작업과 파이프, 그리고 입출력 리디렉션을 조합한 것입니다. : 'infile'이라는 파일의 내용을 표준 입력으로 리디렉션합니다.ls -l: 긴 형식(long format)으로 디렉토리 내용을 나열합니다. 이 명령은 'infile'의 내용을 입력으로 받습니다.|: 파이프 연산자로, ls -l 명령의 출력을 다음 명령의 입력으로 전달합니다.wc -l: 입력으로 받은 텍스트의 줄 수를 세는 명령입니다.>outfile: wc -l 명령의 결과를 'outfile'이라는 파일로 리디렉션합니다.전체적으로 이 명령은 다음과 같은 작업을 수행합니다:'infile'에 나열된 파일이나 디렉토리의 상세 정보를 긴 형식으로 나열합니다.그 결과의 줄 수를 계산합니다.계산된 줄 수를 'outfile'에 저..