일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ecole42
- get_next_line
- 지베르니
- 파리 피크닉
- push swap
- 와인선별방법
- 지베르니 가을
- so_long
- ft_printf
- 42 pipex
- str함수
- 굿노트 스티커
- 이지젯
- 42
- 포르투갈 여행
- 서울42
- 지베르니 여름
- push swap 설명
- 지베르니 계절 추천
- 와인 고르기
- pipex
- printf
- gnl
- pipex 42
- 알고리즘 기초
- get next line
- 에꼴42
- 42 so_long
- 42 libft
- libft
- Today
- Total
뇌 마음 반반저장소
[42_so_long] perror, strerror, exit 자세히 알아보기 본문
Chapitre IV
Partie obligatoire : 필수 부분
Nom du programme 프로그램 이름
so_long
Fichiers de rendu 랜더링 파일들
Makefile, *.h, *.c, quelques cartes (몇 개의 카드들)
Makefile
NAME, all, clean, fclean, re
Arguments 인수들
Une carte au format *.ber
*.ber 형식의 카드
Fonctions externes autorisées
외부기능 허용
• open, close, read, write, malloc, free, perror, strerror, exit
• Toutes les fonctions de la bibliothèque mathématique (option de compilation -lm, man man 3 math)
모든 수학 라이브러리 기능
• Toutes les fonctions de la MiniLibX
모든 MiniLibX 기능
• ft_printf et tout équivalent que VOUS avez codé
당신이 만든 ft_print 기능
Libft autorisée > libft 가능여부
Oui
Description 설명
Vous devez créer un jeu 2D basique dans lequel un dauphin s’échappe de la planète Terre après avoir mangé du poisson. Au lieu d’un dauphin, de poisson et de la Terre, vous pouvez utiliser le personnage, les items et le décor de votre choix.
돌고래가 물고기를 먹고 지구에서 탈출하는 기본 2D 게임을 만들어야 합니다. 돌고래, 물고기, 지구 대신 원하는 캐릭터, 아이템, 풍경을 사용할 수 있습니다.
더 알아보기
perror 함수
#include <stdio.h>
void perror(const char *str);
perror 함수는 입력 인자로 전달한 문자열 뒤에 : 과 함께 마지막에 발생한 에러 메시지를 출력한다.
아래와 같이 사용한다.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main (void)
{
int fd;
fd = open("./mytxt.txt", O_RDONLY);
if (!fd)
{
perror("error open");
return (0);
}
close (fd);
return (0);
}
결과는?
$ ./a.out
error open: No such file or directory
이렇게 내가 원하는 에러 메시지와 실제적으로 무엇이 잘못되었는지 알려준다! 아주 유용하겠군!
strerror 함수
#include <string.h>
#include <errno.h>
char *strerror(int errnum);
이 함수도 위의 perror와 비슷한 함수이지만 헤더가 더 많이 필요하고 printf가 필요하다. perror가 더 유용하겠군.
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main (void)
{
int fd;
fd = open("./mytxt.txt", O_RDONLY);
if (fd < 0)
{
printf("error open : %s\n", strerror(errno));
return (0);
}
close(fd);
return (0);
}
결과는?
$ ./a.out
error open : No such file or directory
exit 함수
#include <stdlib.h>
void exit(int status);
일반적으로 우리는 함수를 종료할 때 return을 사용한다. 하지만 때때로 exit함수를 사용할 수 있다.
exit는 종료하기 전에 모든 파일을 자동으로 닫아주고 (open과 함께 사용하면 유용하겠군!),
출력 버퍼에 데이터가 남아 있으면 쓰기를 완료시킨다.
하지만 return과 exit의 가장 큰 차이점은 return은 함수를 종료할때 사용하지만, exit는 바로 프로세스 자체를 종료한다. 그래서 이 친구는 주로 에러가 났을 때 강제로 종료시키기 위해 if문 안에서 사용된다.
정상종료 시 0을, 에러가 났을 때는 대체로 1을 반환한다.
일반 함수에서 return을 사용하면 return은 함수를 종료하고 리턴 값과 함께 나를 시작한 곳으로 점프하여 리턴값과 함께 돌아간다. man을 보면 이렇게 나와 있다.
jump-statement :
return (expression);
하지만 exit는 그냥 다 정리하고 종료하고 끝낸다는 의미이다. 하지만 main에서 의 return 함수는 exit처럼 프로세스의 완전종료를 의미한다.
정리하자면,
일반함수에서의 return과 exit :
return - 함수를 종료하고 이전 함수로 반환값과 함께 돌아간다.
exit - 파일들을 정리하고 반환값과 함께 프로그램을 종료한다.
메인함수에서의 return과 exit :
return - 반환값과 함께 프로그램을 종료한다.
exit - 파일들을 정리하고 반환값과 함께 프로그램을 종료한다.
option de compilation -lm
gcc 뒤에 -lm옵션을 붙여주면 수학 라이브러리를 포함해 컴파일한다는 뜻이다.
수학헤더 math.h를 헤더파일 안에 포함해 주고, 컴파일할 때 -lm을 붙여준다.
man 3 math
현재 수학공식들을 이해하고 사용할 수 있는 포스팅을 따로 작성하고 있다.. 양이 너무 방대해..
'42 > so_long' 카테고리의 다른 글
[42_so_long] "MiniLibX" 1.함수 알아보기 (2) | 2023.01.02 |
---|---|
[42_so_long] 시작하며 (0) | 2022.12.27 |