ย
- ํ์ผ๋์คํฌ๋ฆฝํฐ fd 0 ํ์ค์ ๋ ฅ 1 ํ์ค์ถ๋ ฅ 2 ํ์ค์๋ฌ ์์๋ก ํ์ผ์ ์ฝ์ด๋ค์ด๋ฉด 3๋ฒ๋ถํฐ ๋ฐฐ์ ๋ฐ๋๋ค.
static varible(์ ์ ๋ณ์)
static ๋ณ์๋ ํจ์๋ด๋ถ์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ ์ ์ญ์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ํน์ดํ๊ฒ๋ static๋ณ์๋ ํ ๊ธฐํ ํ์ง ์์๋ 0์ผ๋ก ์ด๊ธฐํ๋๋ค. static ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ํ ๋น๋๊ณ ํ๋ก๊ทธ๋จ์ด ๋๋ ๋ ํ๊ดด๋๋ค. ์ ์ญ static ๋ณ์์ ๊ฒฝ์ฐ ๊ทธ ์์คํ์ผ ๋ด์ ๋ชจ๋ ํจ์์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง ํจ์ ๋ด๋ถ์์ ์ ์ธ์ ํ๊ฒ๋๋ฉด ๋ค๋ฅธ ํจ์์์๋ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค. ์ด๋ฅผ ๋ด๋ถ์ ์ ๋ณ์๋ผ ํ๋๋ฐ ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ํ๋ฒ๋ง ์ด๊ธฐํ๊ฐ ๋์ด์ง๊ณ ๋ฐ๋ณต์คํ๋๋คํ์ฌ๋ ์ด๊ธฐํ ๋์ง ์๋๋ค.
๋ด๋ถ ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์์ ์ค๊ดํธ ๋ด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์ ์ธ ์ ๊ทผ์ ์ด๋ ค์์ด ์๋ค.
- read ํจ์
- ํค๋: unistd.h
- ํํ: ssize_t read (intย fd,ย voidย *buf, size_t nbytes)
- ์ธ์:ย intย fd ํ์ผ ๋์คํฌ๋ฆฝํฐvoidย *buf ํ์ผ์ ์ฝ์ด ๋ค์ผ ๋ฒํผsize_t nbytes ํผ๋ฒ์ ํฌ๊ธฐ
- ๋ฐํ: ssize_t == -1 ์คํจ>ย 0 ์ ์์ ์ผ๋ก ์คํ๋์๋ค๋ฉด ์ฝ์ด๋ค์ธ ๋ฐ์ดํธ ์
๋ฒํผ์ ํฌ๊ธฐ๋ณด๋ค ํ์ผ์ด ํฌ๋ฉด ์ฌ๋ฌ๋ฒ ์ฝ์ด์ฌ์์๋๋ฐ read ํจ์๊ฐ ์์ฒด์ ์ผ๋ก ์ด์ ์ ์ฝ์๋ถ๋ถ ์ดํ๋ฅผ ๋ฒํผ์ ๋ด์์ค๋ค.
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include "./get_next_line/get_next_line.h" int main() { int fd; static t_gnl_list *head; char *buf; if ( 0 < ( fd = open( "./txt1.txt", O_RDONLY))){//12345๊ฐ ๋ค์ด์๋ ํ์ผ printf("%zd || %s\n",read( fd, buf, 2),buf);// 2 || 12 printf("%zd || %s\n",read( fd, buf, 2),buf);// 2 || 34 printf("%zd || %s\n",read( fd, buf, 2),buf);// 1 || 54 // ์ฝ์ ๋ฐ์ดํธ์๊ฐ ๋ฒํผ์ฌ์ด์ฆ๋ณด๋ค ์์ผ๋ฉด ๋๊น์ง ์ฝ์ ๊ฒ์ด๊ณ , buf+๋ฐ์ดํธ์ -1 ๊น์ง ๋ฒํผ์ ๋ด๊ธด๊ฒ์ด๋ค. printf("%zd || %s\n",read( fd, buf, 2),buf);// 0 || 54 close( fd); } else { printf( "ํ์ผ ์ด๊ธฐ์ ์คํจํ์ต๋๋ค.\n"); } return 0; }
- open
open (const char *FILENAME, int FLAGS[, mode_t MODE])
ํ์ผ ์ด๋ฆ๊ณผ ํ์ผ์ ๋ํ ์ด๊ธฐ ์ต์
์ ์ฃผ๊ฒ ๋๋ฉด ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์์ ์ ์ ๊ฐ์ ๋ฐํ ํ๊ฒ ๋๋ค.
#์ด ๋ ํน์ดํ๊ฒ๋ ๊ฐ์ ํ์ผ์ ๋๋ฒ ์ด๋ฉด ๊ฐ์ ๋์คํฌ๋ฆฝํฐ๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋์คํฌ๋ฆฝํฐ๊ฐ ๋ฐํ๋๋ค.
#๊ตฌํ์ ์ฃผ์ํ ์ ๋ค# - ๊ฐํ์ ๊น์ง ํ์ํ ์ถ๋ ฅ(ํด๋น fd์ backup์ ๋ฌธ์์ด์ด ์๋ค๋ฉด ๊ฐํ์ ๊น์ง ์ถ๋ ฅ) ๊ฒฝ์ฐ์ ์ backup ๋น์ด์์๋ : readํ ๊ฐ์์ ๊ฐํ์ ๊น์ง ๊ฐ์ ์ ์ฅ, ์ดํ๊ฐ์ ํด๋น fd๋ ธ๋ backup์ ์ ์ฅ, ๊ฐํ์ ๊น์ง ์ ์ฅํ ๊ฐ์ด ์๋ค๋ฉด ์ถ๋ ฅ backup ์ฐจ์์๋ : backup์์ ๊ฐํ์ ๊น์ง ๋ฐ์์ด, ๋ง์ฝ ๊ฐํ์ด ์กด์ฌํ๋ค๋ฉด ๊ทธ๋๋ก ์ถ๋ ฅํ readํ๊ฐ ๋ค์ ๋ถ์ฌ์ฃผ๊ธฐ, ์กด์ฌํ์ง ์์๋ค๋ฉด backup + readํ ๊ฐ์ ๊ฐํ์ด ์์๊ฒฝ์ฐ๋ฅผ ํ๋ณํ ์ ์ฅํ๊ฑฐ๋ ์ถ๋ ฅ ๋๋ ์ถ๋ ฅ + ์ ์ฅ ๋จ์ ๋ถ๋ถ ํด๋น fd๋ ธ๋์ backup์ ์ ์ฅ
- ์ฃผ์ํ์ ๋ค 1. malloc ์ ํ๊ณ strlcat์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก malloc์ ํ ๊ฐ์๋ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๋ค์ด์๊ธฐ๋๋ฌธ์ ๋งจ์ฒ์ ๊ฐ์ โ\0โ์ ๋ฃ์ด์ฃผ๋ ํธ์ด ์ข๋ค. ๋ํ ํ ๋นํ ๋ถ๋ถ ๋์ด์ ๊น์ง ์ฐธ์กฐ๋ฅผ ํ๋ ๋ถ๋ถ์ด ์๋์ง์ ๋ํด ์กฐ์ฌํด์ฃผ์ด์ผํ๋ค. ๋ง์ฝ ํ ๋นํ ๋ถ๋ถ์ ๋์ด์ ์ฐธ์กฐ๋ฅผ ํ๋ฉด heap overflow๋ผ๋์ง stack overflow ์๋ฌ๊ฐ ๋ฐ์ํ๋ค!!
main๋ฌธ
#include <fcntl.h> #include <stdio.h> int main() { int fd; int num = 43; fd = open("files/41_no_nl",O_RDONLY); for(int i=1;i<=num;i++) printf("num:%d ---->|%s|\n",i,get_next_line(fd)); }
Loading Comments...