ex05에서 했던 함수 포인터 배열을 사용하는 것에서 switch문만 추가하면 된다. Harl.cpp #include "Harl.hpp" Harl::Harl() {} Harl::~Harl() {} voidHarl::debug(void) { std::cout
42
지도 파싱 생각하기 이미지 파일, RGB는 순서 상관없이 읽을 수 있어야 함. 그 밑에 지도는 무조건 제일 밑에 옴 허용되는 것은 0, 1, N, S, W, E이며 공백이 들어오더라도 읽을 수 있어야함. NO ./path_to_the_north_texture SO ./path_to_the_south_texture WE ./path_to_the_west_texture EA ./path_to_the_east_texture F 220,100,0 C 225,30,0 1111111111111111111111111 1000000000110000000000001 1011000001110000000000001 1001000000000000000000001 111111111011000001110000000000001 1..
전체 구조 intmain(int argc, char **argv, char **envp) { t_infoloc; if (argc != 5) error("argument error\\n"); loc.infile = open(argv[1], O_RDONLY); if (loc.infile == -1) perror("infile error"); loc.outfile = open(argv[4], O_RDWR | O_CREAT | O_TRUNC, 0644); if (loc.outfile == -1) error("outfile error"); loc.path = find_path(envp); loc.argv_command_one = ft_split(argv[2], ' '); loc.argv_command_two = ..
우리가 터미널에서 입력을 받기 위해 argc, argv를 사용함 ex) #include int main(int argc, char *argv[]) { printf("인자 개수: %d\\n", argc); for (int i = 0; i < argc; i++) { printf("인자 %d: %s\\n", i, argv[i]); } printf("\\n환경 변수:\\n"); return 0; } 환경 변수 들고 오기 #include int main(int argc, char *argv[], char *envp[]) { printf("인자 개수: %d\\n", argc); for (int i = 0; i < argc; i++) { printf("인자 %d: %s\\n", i, argv[i]); } printf..
모든 명령어는 종료 상태(exit status)를 리턴한다. 명령어가 성공시에는 0을 리턴하고 실패시에는 에러코드로 해석될 수 있는 non-zero(1~255)를 리턴한다. 유닉스 관례를 잘 따르는 프로그램들은 함수의 가장 마지막에 실행된 명령어가 종료 상태를 결정한다. $?변수는 제일 마지막 명령의 종료 상태 코드를 가진다. echo $? 종료 상태 코드(exit status code) 몇몇 종료 상태 코드들은 예약되어 있기 때문에 사용자가 임의로 exit의 매개변수로 쓰면 안된다. → 흔히 프로그램에서 에러 발생시 종료를 흔히 exit1을 쓰는데, 이는 다양한 에러를 나타내기 때문에 맞는 사용이기도 하지만 ,다른 면에서 보면 에러에 대한 유용한 정보를 나타내지 않는 것도 의미함. 종료 코드 뜻 에러메..
프로레스끼리 통신을 하기 위해 파이프라는 함수를 제공해줌. 원형 #include int pipe(int fd[2]); fd[0] : 함수 호출 후 fd[0]에 데이터를 입력 받을 수 있는 파일 디스크립터가 담김 → buffer에서 read fd[1] : 함수 호출 후 데이터를 출력할 수 있는 파일 디스크립터가 담김 → buffer에 write를 할 수가 있음. # include # include # include # include # define BUFSIZE 100 int main() { int fd[2]; char buffer[BUFSIZE]; pid_t pid; int state; state = pipe(fd); if (state == -1) { puts("error"); exit(1); } pid..
c 언어에서 ‘access()’ 함수는 파일 시스템에서 파일이나 디렉토리에 대한 접근 권한을 확인하는 데 사용됨. 헤더 파일 → 인수 파일 경로 접근 모드 F_OK : 파일의 존재 여부를 확인. R_OK : 파일의 읽기 권한을 확인. W_OK : 파일의 쓰기 권한을 확인. X_OK : 파일의 실행 권환을 확인. 결과 → access() 함수는 성공적으로 수행되면 0을 반환하며, 실패한 경우 -1을 반환합니다. 실패 시, 오류의 원인은 errno 변수를 통해 확인할 수 있다. 이 예는 access함수를 이용해서 example.txt의 존재 여부를 확인. #include #include int main() { char *filename = "example.txt"; if (access(filename, F_..
파일 서술자 복제 함수 dup, dup2 파일 서술자(file descriptor)를 복사함 헤더는 unistd.h dup → dup는 fd로 전달받은 파일 서술자를 복제하여 반환. dup가 돌려주는 파일 서술자는 가장 낮은 서술자를 반환. 성공시 새 파일 서술자 오류시 -1 반환 #include int dup(int fd); 예제 #include #include #include int main() { int old_fd = open("file.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644); printf("Old file descriptor: %d\\n", old_fd); // dup() 함수를 사용하여 새로운 파일 디스크립터 생성 int new_fd = dup(old_fd)..
exec() → system()함수는 OS가 명령 문자열을 보고 프로그램을 실행하는 함수인데 보안이 허술해 악의적인 사용자가 명령 문자열을 악의적으로 조작이 가능했고, 그리하여 나온 것이 exec()계열 함수다. exec()는 현재 실행중인 프로세스를 종료하고 해당 프로세스를 대체하여 실행한다. unistd.h에 선언되어 있다. exec() 계열 함수를 호출하면 새 프로세스(외부 프로그램이)가 실행되고 해당 프로세스는 종료된다. exec() 함수들은 -1을 반환하며, errno 변수를 설정하여 발생한 오류를 알려준다. 오류는 프로그램 파일이 없는 경우, 실행 권한이 없는 경우, 메모리 부족 등의 이유로 발생할 수 있다. exec() 함수는 프로세스 간의 통신이나 프로그램 실행 중 동적으로 다른 프로그램을..
명령어 실행 원리 → 리다이렉션(reditrection)이라는 것을 볼 거임. → 우리는 zsh을 사용하는데 bash으로 test 해보는 것을 추천 밑 부분에 설명을 할 때 zsh와 bash차이를 적으면서 보여주겠다. zsh와 bash의 차이점 우리가 유닉스 운영체제 시스템에서 기본적인 셸은 Bash로 설치된다. 그래서 좀 더 기본적인 틀에 맞추고자 Bash를 추천하며 zsh할 경우 bash와 다른 결과값이 나올 수도 있다. 또한 과제에서 $가 들어가있기 때문에 bash로 하는 것이 더 좋다 Zsh (Z Shell)과 Bash (Bourne Again Shell)은 둘 다 Unix 및 Unix-like 운영 체제에서 사용되는 대화형 셸(Shell) 프로그램 호환성: Bash는 기본적으로 대부분의 Unix..