본문 바로가기
42cursus/get-next-line

개행으로 끝나느냐, 개행으로 끝나지 않느냐

by 인듯아닌듯 2020. 7. 22.
hi, hello('\n')
hi, wins
//
hi, hello('\n')
hi, wins('\n')

//

두 문단을 gnl로 읽었을 때 차이점은 line의 맨마지막줄이 '\0'로 끝나는지 아닌지 차이

#include "get_next_line_bonus.h"
#include <stdio.h>
#include <sys/fcntl.h>

int main()
{
	int fd;
	int ret;
	char *line;
	fd = open("./test", O_RDONLY);
	while ((ret = get_next_line(fd, &line)) > 0)
	{
		printf("%s\n",line);
		free(line);
	}
	printf("%s\n",line);
	free(line);
	return(0);	
}

 

main.c 함수로 실행시켜보면, 마지막에 한줄에 '\0'이 있느냐 없느냐에 따라 출력되는 문단이 달라진다.

참고로 '\0' 과 EOF(=-1)는 다르다.[1]

 

 

read함수는 모든 문자를 다 읽으면 0을 return하지만, buffer에는 0('\0')을 넣어주지않는다. 왜냐하면 파일에 \0값이 없기 때문이다.(이 문서 맨 위에서 보여줬다시피)

#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <sys/fcntl.h>

int main()
{
	char buffer[65];
	int count = 64;
	buffer[64] = 0;
	memset(buffer, 76, 64);
	for (size_t i = 0; i < count; i++)
	{
		printf("%c\n", buffer[i]);
	}
	printf("--------------\n");
	int fd = open("./what", O_RDONLY);
	printf("%d\n", read(fd, buffer, 40));
	printf("%s\n",buffer);
	close(fd);
}

1.https://www.quora.com/What-is-the-difference-between-0-and-EOF-in-C

'42cursus > get-next-line' 카테고리의 다른 글

get_next_line(bonus)  (0) 2020.07.11
get_next_line(mandatory)  (0) 2020.07.02
프로세스의 메모리, 파일 입출력함수  (0) 2020.07.01