opendir.c 에서 괄호 관련
239
작성한 질문수 8
강의 재미있게 듣고 있습니다.
while (entry = readdir(dp)){
괄호를 위와 같이 하면 에러가 납니다. 왜 그런가요?
while ((entry = readdir(dp))){ ... 하나씩 더 해주어야 하는 이유가 궁금합니다.
현재 위 내용을 듣고 있어서 ... 이후 내용에 아래 내용 포함되나요?
fork(), kill, wait, waitpid, exec 등도 다루어 지나요?
POSIX threads
답변 1
1
안녕하세요, yong oh님.
먼저 첫번째 코드를 놓고 얘기를 해볼게요
while (entry = readdir(dp)){
아시겠지만, if문이나 while문 다음에는 괄호 안에 condition이 나옵니다. 이 코드의 의미는 "readdir()의 결과를 entry에 저장하고, 그 값이 NULL인지 아닌지에 따라 while loop을 돌아라"라는 의미입니다. 사실 위쪽의 코드도 문법적으로 보면 틀린 것은 아닙니다. 하지만 컴파일러(gcc)는 condition 내에 assignment가 있으니 필요하다면 괄호를 사용하라는 경고를 띄우게 되죠. 많은 사람들이 condition 부분에서 == 대신 =를 사용하는 실수를 많이 저지르니 condition에 assignment가 들어가면 경고 처리를 해주는 것입니다. 옵션에 따라 이 경고가 포함될 수도 있고, 포함되지 않을 수 있습니다. 또 경고로 끝날 수도 있고 에러로 처리될 수도 있죠.
그래서 코드를 좀 더 명확히 작성한 것이 괄호를 한번 더 붙여준 아래 코드입니다.
while ((entry = readdir(dp))){
이 코드는 할당 부분에 괄호를 붙여줌으로써 명시적으로 할당임을 나타낸 것입니다. 할당된 결과가 while문의 condition으로 처리됩니다. 따라서 첫번쨰 코드와 같은 경고가 발생하지 않는 것입니다.
그리고 fork, kill과 같은 process 관련 부분과 pthread 관련한 부분은 "섹션4. 프로세스와 쓰레드"에서 다루게 됩니다.
질문에 대한 답이 됐을까요? 더 궁금한 내용 있으시면 추가 질문 남겨주세요~ :D
inotify 객체에 등록된 watch descriptor 해제 관련 질문
0
56
2
select API 실습 코드 질문
0
59
2
wsl에서 fcntl사용
0
83
2
inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...
0
195
2
./stat 파일이름
0
283
2
fopen r, r+모드 차이
0
468
2
강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?
0
332
1
pthread 질문
0
426
2
I/O Multiplexing(select) 질문
0
328
1
inotify.c. ret 질문
0
310
1
inotify.c 질의합니다.
1
321
1
child process
0
726
1
read/blocking
0
576
1
flock
0
570
1
system call
0
608
1
pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?
0
494
1
fork() 함수 사용시 결과 관련 질문
0
389
1
exec 관련 궁금한 사항
0
464
2
파일 디스크립터와 FILE 구조체에 대한 질문
0
563
1
buf 선언에 따른 read() fail 문제
0
258
2
파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문
0
262
1
2번 multi thread 방법 질문
0
250
1
segmentation fault 발생 관련 문의
1
852
1
라이브 코딩 실습 코드
0
241
1





