unistd_function - KimTaebin-ai/study_posts GitHub Wiki

unistd.h 와 system call

unistd.hλŠ” POSIX ν‘œμ€€μ„ μ€€μˆ˜ν•˜λŠ” 헀더 파일둜, write와 같은 λ‹€μ–‘ν•œ μ‹œμŠ€ν…œ μ½œμ„ μœ„ν•œ ν•¨μˆ˜μ˜ μ›ν˜•μ΄ μ •μ˜λ˜μ–΄ μžˆλ‹€. 이 ν•¨μˆ˜λŠ” μ‹€μ œλ‘œ μ»€λ„μ—μ„œ μ •μ˜λœ μ‹œμŠ€ν…œ μ½œμ„ ν˜ΈμΆœν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ 있으며, μ»€λ„κ³Όμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μΆ”μƒν™”ν•˜μ—¬ μœ μ € ν”„λ‘œκ·Έλž¨μ΄ μ‰½κ²Œ ν•˜λ“œμ›¨μ–΄ μžμ›μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ 도와쀀닀.

각 λΆ„μ•Ό 별 μ‹œμŠ€ν…œ 콜 μ˜ˆμ‹œ

  • ν”„λ‘œμ„ΈμŠ€ μ œμ–΄: fork(), exit(), wait(),
  • 파일 관리: open(), read(), write(), close()
  • μž₯치 관리: ioctl(), read(), write()
  • 정보 μœ μ§€: getpid(), alarm(), sleep()
  • λ³΄μ•ˆ(Protection): chmod(),umask(), chown()

c μ–Έμ–΄μ—μ„œ unistd ν—€λ”νŒŒμΌμ„ 톡해 μ‚¬μš©ν•˜λŠ” write ν•¨μˆ˜λŠ” μœ μ €λͺ¨λ“œμ—μ„œ 컀널λͺ¨λ“œλ‘œ μ „ν™˜ν•˜μ—¬ 파일 μ‹œμŠ€ν…œμ— 데이터λ₯Ό μ“°λŠ” μ‹œμŠ€ν…œ μ½œμ„ λ°œμƒμ‹œν‚¨λ‹€. 이 κ³Όμ •μ—μ„œ C ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ •μ˜λœ write ν•¨μˆ˜λŠ” 컀널 λ‚΄λΆ€μ˜ write μ‹œμŠ€ν…œ 콜과 직접 λ§€ν•‘λœλ‹€.

λ”°λΌμ„œ unistd.h의 write ν•¨μˆ˜λŠ” μ»€λ„μ˜ write μ‹œμŠ€ν…œ 콜과 λ™μΌν•œ λ™μž‘μ„ μˆ˜ν–‰ν•˜λ©°, λ‹€λ§Œ μœ μ € λͺ¨λ“œμ—μ„œ 호좜된 ν•¨μˆ˜κ°€ μ»€λ„λ‘œ μ‹œμŠ€ν…œ μ½œμ„ λ°œμƒμ‹œν‚€λŠ” 역할을 ν•œλ‹€κ³  λ³Ό 수 μžˆλ‹€.

read() ν•¨μˆ˜

read ν•¨μˆ˜λŠ” fdμ—μ„œ bufκ°€ κ°€λ¦¬ν‚€λŠ” 곳으둜 κ°€μ„œ

μ›ν˜•

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

λ§€κ°œλ³€μˆ˜:

  • fd: 파일 λ””μŠ€ν¬λ¦½ν„°
  • buf: 데이터λ₯Ό μ €μž₯ν•  λ²„νΌμ˜ 포인터
  • count: 읽을 μ΅œλŒ€ λ°”μ΄νŠΈ 수

λ°˜ν™˜κ°’:

  • 성곡 μ‹œ: μ‹€μ œλ‘œ 읽은 λ°”μ΄νŠΈ 수 (0은 파일의 끝)
  • μ‹€νŒ¨ μ‹œ: -1 (errnoκ°€ 섀정됨)

λ²„νΌλž€?

버퍼(Buffer)λŠ” μž„μ‹œ 기얡곡간이닀. μž…λ ₯ν•œ 데이터가 우리 눈으둜 λ³΄μ΄κΈ°κΉŒμ§€ λ²„νΌλΌλŠ” 곳에 μž„μ‹œ μ €μž₯을 거쳐 ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λœλ‹€.

μ»€ν”Όμˆμ—μ„œμ˜ μ£Όλ¬Έ 처리λ₯Ό 예둜 λ“€μ–΄λ³΄μž

  1. 버퍼가 μ—†λŠ” 경우:
  • 상황: λ°”λ¦¬μŠ€νƒ€ 1λͺ…, 고객이 ν•œ λͺ…μ”© μ£Όλ¬Έ
  • κ³Όμ •: 고객 μ£Όλ¬Έ β†’ λ°”λ¦¬μŠ€νƒ€ 컀피 제쑰 β†’ κ³ κ°μ—κ²Œ 전달 β†’ λ‹€μŒ 고객 μ£Όλ¬Έ
  • 문제점: 각 고객은 μžμ‹ μ˜ 컀피가 완성될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό 함
  1. 버퍼λ₯Ό μ‚¬μš©ν•˜λŠ” 경우:
  • 상황: λ°”λ¦¬μŠ€νƒ€ 1λͺ…, μ£Όλ¬Έ μ ‘μˆ˜λŒ€(버퍼) μΆ”κ°€
  • κ³Όμ •: μ—¬λŸ¬ 고객 μ£Όλ¬Έ β†’ μ£Όλ¬Έμ„œκ°€ μ ‘μˆ˜λŒ€μ— μŒ“μž„ β†’ λ°”λ¦¬μŠ€νƒ€κ°€ μ—°μ†ν•΄μ„œ 컀피 제쑰
  • μž₯점: 고객 λŒ€κΈ° μ‹œκ°„ κ°μ†Œ, λ°”λ¦¬μŠ€νƒ€μ˜ 효율적인 μž‘μ—… κ°€λŠ₯

버퍼 μ‚¬μ΄μ¦ˆ

κ³΅λΆ€ν•˜λŠ” 김에 μΊμ‹œμ™€ λ ˆμ§€μŠ€ν„°λ„ κ³΅λΆ€ν•΄λ³΄μ•˜λ‹€

파일 λ””μŠ€ν¬λ¦½ν„° (fd)

as

⚠️ **GitHub.com Fallback** ⚠️