๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปTIL12. scanf, fopen, fread ํ•จ์ˆ˜, ํŒŒ์ผ์‹œ๊ทธ๋‹ˆ์ฒ˜

Lilyยท2021๋…„ 6์›” 7์ผ
0

Today I Learned

๋ชฉ๋ก ๋ณด๊ธฐ
12/30
post-thumbnail
post-custom-banner

์ด ๊ธ€์€ Boostcourse ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ปดํ“จํ„ฐ ๊ณผํ•™์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿฑโ€๐Ÿš€ scanf ํ•จ์ˆ˜

scanfํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ˜•์‹์ง€์ •์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅํ•œ๋‹ค.

scanf("ํ˜•์‹์ง€์ •์ž", ์ž…๋ ฅ๊ฐ’์„ ์ €์žฅ ํ•  ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ)์™€ ๊ฐ™์ด ๋‘ ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.

์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ char 5๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

#include <stdio.h>

int main(void)
{
   char s[5];
   printf("s:");
   scanf("%s", s); //clang์€ ๋ฌธ์ž๋ฐฐ์—ด์˜ ์ด๋ฆ„์„ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋‹ค๋ฃธ
   printf("s: %s", s);
 }

๐Ÿฑโ€๐Ÿš€ fopen , fclose ํ•จ์ˆ˜

fopenํ•จ์ˆ˜๋Š” ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ๋“ค์—ฌ์™€ ๋‹ค์–‘ํ•œ ์ž…์ถœ๋ ฅ ๋ชจ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์ž‘์—…์ด ๋๋‚ฌ์œผ๋ฉด fcloseํ•จ์ˆ˜๋กœ ํŒŒ์ผ์„ ๋‹ซ์•„์ค€๋‹ค.

fopen(filename,"mode") ์—ด๊ณ ์ž ํ•˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ ๋ชจ๋“œ(r, w, a)๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. fopenํ•จ์ˆ˜๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

๐Ÿ“ mode

- r : read, ํŒŒ์ผ์„ ์ฝ๊ธฐ ํ˜•์‹์œผ๋กœ ์—ฐ๋‹ค.
- w : write, ํŒŒ์ผ์„ ์“ฐ๊ธฐ ํ˜•์‹์œผ๋กœ ์—ฐ๋‹ค. ๋งŒ์ผ ๋™์ผํ•œ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ธฐ์กด ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ๋นˆ ์ƒˆํŒŒ์ผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ๋งŒ์ผ ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ๋นˆ ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
- a : append, ํŒŒ์ผ์„ ๋ง๋ถ™์ด๊ธฐ ํ˜•์‹์œผ๋กœ ์—ฐ๋‹ค. ๋งŒ์ผ ๋™์ผํ•œ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด, ์ž‘์„ฑํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋์— ๋ง๋ถ™์—ฌ์ง„๋‹ค. ๋งŒ์ผ ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ์ƒˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿฑโ€๐Ÿš€ ํŒŒ์ผ ์‹œ๊ทธ๋‹ˆ์ฒ˜

JPEG, PNG, MP4๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ํŒŒ์ผ์€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํฌ๋งท์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํŒŒ์ผ ์‹œ๊ทธ๋‹ˆ์ฒ˜(File Signature)๋ž€ ํŒŒ์ผ ํฌ๋งท์˜ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋‚ด์šฉ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  JPEGํŒŒ์ผ์€ 0xFF, 0xD8, 0xFF ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
ํŒŒ์ผ์˜ ์‹œ์ž‘๋ถ€๋ถ„์— ์กด์žฌํ•˜๋Š” ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” header signature, ํŒŒ์ผ์˜ ๋๋ถ€๋ถ„์— ์กด์žฌํ•˜๋Š” ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” Footer signature๋ผ ๋ถ€๋ฅธ๋‹ค.
ํŒŒ์ผ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ํŒŒ์ผ์˜ ํฌ๋งท์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

ํŒŒ์ผ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ๋‹ค์–‘ํ•œ ํŒŒ์ผ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋Š” ์•„๋ž˜ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.
http://forensic-proof.com/archives/300

๐Ÿฑโ€๐Ÿš€ fread ํ•จ์ˆ˜

freadํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์—์„œ ์›ํ•˜๋Š” ๋ฐ”์ดํŠธ๋งŒํผ, ์›ํ•˜๋Š” ํšŸ์ˆ˜๋งŒํผ ์ฝ์–ด ๋ฐฐ์—ด(๋ฒ„ํผ)์— ์ €์žฅํ•œ๋‹ค.

fread(์ €์žฅํ•  ๋ฒ„ํผ์˜ ์ฃผ์†Œ, ์ฝ์„ ๋ฐ”์ดํŠธ ์ˆ˜, ์ฝ์„ ํšŸ์ˆ˜, ์ฝ์„ ํŒŒ์ผ) ๊ณผ ๊ฐ™์€ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

ํŒŒ์ผ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ freadํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด ํŒŒ์ผ์˜ ํ˜•์‹์ด JPEG์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

#include <stdio.h>

int main(int argc, char *argv[])
{
    if (argc != 2)     // ๋ช…๋ น ํ”„๋กฌํฌํŠธ์—์„œ ํŒŒ์ผ์„ ์ž…๋ ฅ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธ
    {
        return 1;
    }

    FILE *file = fopen(argv[1], "r");    // ์ž…๋ ฅ๋ฐ›์€ ํŒŒ์ผ์„ ์ฝ๊ธฐ๋ชจ๋“œ๋กœ ์—ฐ๋‹ค

    if (file == NULL)
    {
        return 1;
    }
 
   unsigned char bytes[3];
    fread(bytes, 3, 1, file);  // ํŒŒ์ผ์˜ ์ฒซ 3๋ฐ”์ดํŠธ๋ฅผ bytes์— ์ €์žฅํ•œ๋‹ค

    if (bytes[0] == 0xff && bytes[1] == 0xd8 && bytes[2] == 0xff)
    {
        printf("Maybe\n");
    }
    else
    {
        printf("No\n");
    }
    fclose(file);
}
profile
i๐ŸŽS ๊ฐœ๋ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€