pipex
๐Ÿ™Š

pipex

Created
Mar 1, 2023 05:50 AM
Last edited time
Last updated January 23, 2024
Tags
42
Language
C
URL

์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•จ์ˆ˜

  • #include <fcntl.h>
    • - int open (const char *name, int flags, mode_t mode); const char* name : ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ํ˜น์€ ์ƒ๋Œ€ ๊ฒฝ๋กœ์ด๊ฑฐ๋‚˜ ํŒŒ์ผ ์ด๋ฆ„์ด๋‹ค. int flags : ๋ฐ˜๋“œ์‹œ O_RDONLY , O_WRONLY, O_RDWR ๊ฐ’๋“ค ์ค‘ ํ•˜๋‚˜์ด์–ด์•ผ ํ•œ๋‹ค. ๊ฐ๊ฐ "์ฝ๊ธฐ ์ „์šฉ", "์“ฐ๊ธฐ ์ „์šฉ", "์ฝ๊ธฐ ์“ฐ๊ธฐ"๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฐ’๋“ค๊ณผ or ์—ฐ์‚ฐ์„ ํ†ตํ•˜์—ฌ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. mode_t mode : flags์— O_CREAT๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ํŒŒ์ผ์˜ ๊ถŒํ•œ์„ ์„ค์ •ํ•œ๋‹ค. - int close (int fd);
  • #include <stdlib.h>
    • - void* malloc(size_t size); - void free(void *ptr); - void exit(int status);
  • #include <string.h>
    • - char* strerror(int errnum); errnum ์˜ ๊ฐ’์„ ํ†ตํ•ด ๋ฐœ์ƒํ•˜์˜€๋˜ ์˜ค๋ฅ˜์— ์•Œ๋งž์€ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด ๋•Œ ๋ฆฌํ„ด๋˜๋Š” ํฌ์ธํ„ฐ๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋‚ด์šฉ์ด ๋ฐ”๋€” ์ˆ˜ ์—†๋‹ค.
  • #include <stdio.h>
    • - void perror(const char* str); ์ „์—ญ ๋ณ€์ˆ˜ errno ์˜ ๊ฐ’์„ ํ•ด์„ํ•˜์—ฌ ์ด์— ํ•ด๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ํ‘œ์ค€ ์˜ค๋ฅ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(stderr)์— ์ถœ๋ ฅํ•œ๋‹ค. ๋˜ํ•œ ์ถ”๊ฐ€์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”์„ธ์ง€๋ฅผ str ์ธ์ž์— ๋‹ด์•„ ์ถœ๋ ฅํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.-

PID ๋ž€??`

pid๋Š” process id์˜ ์ค„์ž„๋ง๋กœ ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€์—ฌํ•˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค. pid๋Š” ์ตœ๊ทผ ํ• ๋‹นํ•œ pid์— 1์„ ๋”ํ•œ ๊ฐ’์œผ๋กœ ํ• ๋‹นํ•ด์ค€๋‹ค.

์Šค๋ ˆ๋“œ๋ž€???

ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ โ‚ฉ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.(ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€ cpu ์ˆ˜ํ–‰ ๋‹จ์œ„) ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๋Š” ํ•œ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค.
์ฐธ์กฐ

๋น„ํŠธ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž
์—ฐ์‚ฐ์ž์˜ ๊ธฐ๋Šฅ
&
๋น„ํŠธ๋‹จ์œ„๋กœ AND ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
|
๋น„ํŠธ๋‹จ์œ„๋กœ OR ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
^
๋น„ํŠธ๋‹จ์œ„๋กœ XOR ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.
~
๋‹จํ•ญ ์—ฐ์‚ฐ์ž๋กœ์„œ ํ”ผ์—ฐ์ž์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚จ๋‹ค.
<<
ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
>>
ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ ์—ด์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
๊ฐ ์—ฐ์‚ฐ์ž ์˜ˆ์‹œ
& ์—ฐ์‚ฐ์ž (๋‘˜๋‹ค 1์ผ๋•Œ)
์—ฐ์‚ฐ
๊ฒฐ๊ณผ
0 & 0
0
0 & 1
0
1 & 0
0
1 & 1
1
  • ์˜ˆ์‹œ
    • #include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 & num2; printf("and ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ •////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00000100 => 4 */ ///////////////๊ฒฐ๊ณผ////////////////// /* and ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : 4 */
| ์—ฐ์‚ฐ์ž (ํ•˜๋‚˜๋ผ๋„ 1์ด๋ฉด)
์—ฐ์‚ฐ
๊ฒฐ๊ณผ
0 | 0
0
0 | 1
1
1 | 0
1
1 | 1
1
  • ์˜ˆ์‹œ
    • #include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 | num2; printf("or ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ •////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00011111 => 31 */ ///////////////๊ฒฐ๊ณผ////////////////// /* or ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : 31 */
^ ์—ฐ์‚ฐ์ž (์„œ๋กœ ๋‹ค๋ฅผ๋•Œ 1)
์—ฐ์‚ฐ
๊ฒฐ๊ณผ
0 ^ 0
0
0 ^ 1
1
1 ^ 0
1
1 ^ 1
0
  • ์˜ˆ์‹œ
    • #include<stdio.h> int main() { int num1 = 15; int num2 = 20; int num3 = num1 ^ num2; printf("xor ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : %d\n",num3); } ///////////////๊ณผ์ •////////////////// /* 00001111 => 15 &00010100 => 20 --------- 00011011 => 27 */ ///////////////๊ฒฐ๊ณผ////////////////// /* xor ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : 27 */
~ ์—ฐ์‚ฐ์ž (๋ฐ˜์ „, ๋ณด์ˆ˜์—ฐ์‚ฐ)
์—ฐ์‚ฐ
๊ฒฐ๊ณผ
~ 0
1
~ 1
0
  • ์˜ˆ์‹œ
    • #include<stdio.h> int main() { int num1 = 15; int num2 = ~num1; printf("NOT ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : %d\n",num2); } ///////////////๊ณผ์ •////////////////// /* ~00001111 => 15 --------- 00010000 => -16 */ ///////////////๊ฒฐ๊ณผ////////////////// /* NOT ์—ฐ์‚ฐ ๊ฒฐ๊ณผ : -16 */
  • ๋ณด์ˆ˜ ์˜ˆ์‹œ
    • 7 => 0111 -8 => 1000 -n == n-1์„ ๋’ค์ง‘์€ ๊ฒฐ๊ณผ
<< ์—ฐ์‚ฐ์ž && >> ์—ฐ์‚ฐ์ž
๋น„ํŠธ๋ฅผ ์—ฐ์‚ฐ์ž ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” shift์—ฐ์‚ฐ์ด๋‹ค.
#include<stdio.h> int main() { int num1 = 15; int num2 = num1 << 1; int num3 = num1 << 2; int num4 = num1 >> 1; int num5 = num1 >> 2; printf("<< 1์นธ์ด๋™ ๊ฒฐ๊ณผ : %d\n<< 2์นธ์ด๋™ ๊ฒฐ๊ณผ : %d\n",num2,num3); printf(">> 1์นธ์ด๋™ ๊ฒฐ๊ณผ : %d\n<< 2์นธ์ด๋™ ๊ฒฐ๊ณผ : %d\n",num4,num5); } ///////////////๊ณผ์ •////////////////// /* 00001111 00011110 << 1 00111100 << 2 00000111 >> 1 00000011 >> 2 */ ///////////////๊ฒฐ๊ณผ////////////////// /* << 1์นธ์ด๋™ ๊ฒฐ๊ณผ : 30 << 2์นธ์ด๋™ ๊ฒฐ๊ณผ : 60 // << ๋Š” ๋‘๋ฐฐ์”ฉ ์ ์šฉ๋˜๋Š”๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. >> 1์นธ์ด๋™ ๊ฒฐ๊ณผ : 7 << 2์นธ์ด๋™ ๊ฒฐ๊ณผ : 3 */
ย 

๋ฆฌ๋‹ค์ด๋ ‰์…˜

๋ฆฌ๋ˆ…์Šค์—์„œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณดํ†ต ์„ธ๊ฐœ์˜ ํŒŒ์ผ ์„œ์ˆ ์ž๋ฅผ ์—ด๊ฒŒ๋œ๋‹ค. ํ‘œ์ค€์ž…๋ ฅ, ํ‘œ์ค€์ถœ๋ ฅ, ํ‘œ์ค€์—๋Ÿฌ
  • cmd > file_name ํŒŒ์ผ์— ๋ฎ์–ด์“ฐ๊ธฐ ์ €์žฅ์ด ๋œ๋‹ค.
    • ls -l 10 > test.txt ์™€ ๊ฐ™์ด ์ž‘์„ฑ์„ ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ls -l 10 2> test.txt ์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ์ €์žฅ๋œ๋‹ค. ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์—๋Ÿฌ 012
  • cmd >> file_name
    • ํŒŒ์ผ์— ์ด์–ด์„œ ์ €์žฅ์ด ๋œ๋‹ค.
  • cmd < file_name
    • file_name ์˜ ํŒŒ์ผ ๋‚ด์šฉ์„ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
      cat test.txt test text file!! sed 's/test/@@@/' < test.txt test @@@ file!!
  • ์˜ˆ์‹œ
< input cat | grep 'hi' > output < input == inputํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. cat | grep 'hi' > output == ์ž…๋ ฅ์— ๋Œ€ํ•ด cat | grep 'hi' ํ•œ ์ถœ๋ ฅ์„ output์— ๋ฎ์–ด์“ฐ๊ธฐํ•œ๋‹ค.

here_doc

tag ํ˜น์€ eof์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€์˜ ์ž…๋ ฅ์„ ํ‘œ์ค€์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
cat << END ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ์œผ๋กœ END ํ˜น์€ eof๋ฅผ ์ฃผ๊ธฐ์ „๊นŒ์ง€ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. ์ดํ›„ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚จ๋‹ค.

์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

ย 
ย 

Loading Comments...