프로그래밍 QnA

breakd의 이미지

C++ 관련 문제인데 매개변수를 많이 사용할 수 있다는것이 오버로딩인지 가변인자 매크로를 사용하는 건지...

제가 영어 번역을 못하는건지 문제 자체를 이해 못하는 건지 모르겠네요;
프로그래밍 언어론 교재에서
C++ also allows functions to accept more parameters than those specified in the function definition. Why and how is this possible?
라는 문제가 있는데

이게 함수의 오버로딩에 대한 문제인지 함수 가변인자에 관한 내용인지 모르겠네요.
가변인자는 C 에서도 쓸 수 있는 걸로 아는데...(맞죠?)
allows to 가 문장에 있다는건 C 에서는 없는데
C++에서는 허락한다는 의미가 내포되어 있는 것 같으니 가변인자는 아닌 것같은데

해석을 해보면 또 함수 정의에 기술 된 것 보다 더 많은 파라미터 받아들이는 걸 허용한다는데
또 이렇게 놓고보니 오버로딩인가 싶기도 하고..

게다가 영어 해석 질문인 것같아서 여기 질문 드리는 것도 애매하네요.. ㅜㅜ

inviolable의 이미지

freopen함수에 대한 설명(리눅스, 표준 c라이브러리이기도 함)좀 이해시켜주세요(책에 나와있는).

FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp); <- freopen 함수 정의.

FILE 객체는 곧 스트림을 뜻하는 것이고...

책에는 이렇게 설명이 되어있는데 대체 뭔말인지 모르겠습니다.

2.freopen 함수는 지정된 파일을 지정된 스트림으로 연다. 스트림이 이미 열려 있으면 닫은 후 다시 연다. 스트림에 지향이 설정되어 있으면 freopen은 그 지향을 지운다. 이 함수는 지정된 파일을 미리 정의된 스트림(표준 입력, 표준 출력, 표준 오류)중 하나로 여는 데 주로 쓰인다.

inviolable의 이미지

파일은 열려있으나 스트림은 없는 경우(파이프나 네트워크통신 채널을 생성하는 함수와 관련있는 것 같네요...)

Unix 고급 프로그래밍 제2판(번역자 류광, 원서 Advanced Programming in the UNIX environment) 165페이지 fdopen함수에 대한 설명에서요.

3. fdopen 함수는 기존 파일 서술자(open이나 dup,dup2,fcnl,pipe,socket,socketpair,accept 함수로 얻은)를 받아서 그 서술자에 표준 I/O 스트림을 연관 시킨다. 이 함수는 파이프나 네트워크 통신 채널을 생성하는 함수들이 돌려준 서술자를 스트림에 연관시키는 용도로 자주 쓰인다. 그런 특수한 종류의 파일들을 표준 I/O fopen함수로 열 수 없기 때문에, 해당 장치에 고유한 함수를 호출해서 파일 서술자를 얻은 후, fdopen을 이용해서 그것을 표준 I/O 스트림과 연관시켜야 한다.

그리고 조금 건너뛰어서 fdopen함수의 2번째 인수인 type에 대한 설명입니다.(fopen, freopen의 2번째 인수이기도 함 이 3함수는 모두 표준 I/O스트림을 여는데 사용됩니다.)

inviolable의 이미지

리눅스 시스템 프로그래밍 공부하는 초보인데요 파일과 스트림에 대해서 몇가지 질문이 있어요.

표준 I/O함수로(시스템 콜 함수인 write말고)로 입력한다고 하면요... 표준 입출력함수 호출 -> 버퍼링 -> 버퍼링 정책에 따라 버퍼에 일정량 량이 찼을 때(전체 버퍼링이면 버퍼 전체가 다 찼을 때, 줄 단위 버퍼링이면 새줄 문자가 입력되었을 때) -> write함수 호출 -> 커널 내부 버퍼에 저장 -> 대기열(큐)에 등록(sync함수, 데몬 프로세스가 30초마다 수행) -> 한가할 때 큐에 있는 내용이 디스크에 저장됨.

이런 과정인 거 맞나요??

유명한 책인 Advanced Programming the UNIX Environment의 번역본(류광님이 번역자세요)인 UNIX 고급 프로그래밍 제2판 이라는 책인데요.

3.13절(제3장은 파일 I/O)에 sync, fsync, fdatasync함수를 설명하면서 이런 설명을 하셨어요.

dissu의 이미지

C언어에서 wrapper main 함수

어떤 라이브러리를 사용하는 사용자가 제작한 main함수가 끝나기 전에 그 라이브러리에 존재하는 추가적으로 실행하고 싶은 메소드가 있는데요.

Wrapper exit 나 Wrapper printf 같은 경우 반환형과 인수들의 수와 타잎이 정해져 있으므로

Wrapper 선언과 필요하다면 가변인수처리를 통하여 Wrapper 함수를 만들 수 있었습니다.

하지만 main 함수는 사용자가 argument와 return 값을 설정 할 수 있기에 모든 경우를 고려해야 될것 같습니다.

이러한 모든 경우를 Wrapper main함수를 제작 할 수 있을까요?

nicemuy의 이미지

컴퓨터의 소수 계산 질문있습니다.

먼저 제가 고민하게된 소스 부터 보여드리겠습니다.

아마 c언어를 처음 배우거나할때 참 유명한 소스로 알고있습니다. 0.1을 100번 더하는 소스인데요, 저는 여기에 0.1*100을 한것을 따로 추가했습니다.

궁금한게 지금 저 소스의 출력값이 10.000002와 10.000000으로 나오는데, 어째서 0.1을 100번 더한것과 0.1에 100을 곱한 값의 정밀도가 다른건지 알고싶습니다.

0.1*100도 10.000002가 나와야할것 같은데 의외로 정확하게 나와서 당황했습니다. 어떻게 이렇게 되는지 알려주세요!

feellogan의 이미지

madwifi를 이용한 AP 동작 관련

Fedora 13에 madwifi를 설치한 후 AP모드로 동작을 시키려고 하는데요.

eth0에는 공인 IP주소를 할당하고 DNS, gateway주소를 할당하여 인터넷이 잘 됨을 확인하였습니다.

그리고 ath0를 AP모드로 설정한 뒤 사설 IP주소를 할당하고 dhcp를 동작하게 하여 ath0에 붙은 휴대폰에 사설IP 주소를 할당합니다. 와이파이가 동작되었다는 무늬도 휴대폰에 나타납니다.

그런데 실제로는 인터넷이 되지 않고 tcpdump로 찍어보면 ARP만 계속 날아갑니다. 왜 그런 걸까요...?

제 생각에는 일반적으로 공유기는 공인 IP를 이용해서 유선으로 받아와서 사설 IP를 통해 무선으로 단말들과 통신을 하는데 이는 공유기 내부에서 유선으로 받은 데이터를 무선으로 전송해주기 때문이죠.

하지만 제가 꾸민 상황에서는 단말이 AP에 사설 IP로 접속이 되어 있는데 madwifi가 이를 어떻게 유선으로 보내는지가 의문입니다. 설정은 다 한 것 같은데 인터넷이 되지 않아서 너무 답답하여 글을 올립니다. 혹시 아시는 분 있으신가요?ㅜㅜ

sacredone의 이미지

blocking 소켓 non-blocking 소켓으로의 변환

블로킹을 넌블로킹으로 변환할때의 방법을 찾아보니까

fcntl() 함수를 사용하라는 글이있었고

ioctlsocket() 함수를 호출해야만 가능하다는 글도있고

헷갈리네요;;

게다가 소켓을 어떻게 변환했다쳐도

read/write, recv/send 등의 함수사용에도

(특히 recv/send) 인자값에 변화가 있을거같은데

지식좀 나눠주실수 있으신분 계실까요 ㅠ

먼저 제가짠 단순한 코드점 올려볼게요

먼저 서버프로그램

페이지

프로그래밍 QnA 구독하기