c 56

C에서 stdout의 버퍼링을 해제하는 방법

C에서 stdout의 버퍼링을 해제하는 방법 다음 코드에 대한 정확한 결과를 얻기 위해 stdout에 대한 버퍼링을 해제하고 싶습니다. while(1) { printf("."); sleep(1); } 버퍼가 채워질 때만 '.'의 코드 printf 번들입니다.setvbuf 함수를 사용할 수 있습니다. setvbuf(stdout, NULL, _IONBF, 0); 다음은 이 기능에 대한 다른 링크입니다. POSIX C/C++ 세트버프도 사용할 수 있습니다. setbuf(stdout, NULL); 이것으로 모든 것이 해결될 것입니다.사용하다fflush(FILE *stream)와 함께stdout매개 변수로 사용합니다. http://www.elook.org/programming/c/fflush.html다음을 수행할..

programing 2023.06.06

종료하기 전에 메모리를 확보해야 합니까?

종료하기 전에 메모리를 확보해야 합니까? 오류로 인해 프로그램을 종료할 때 모든 mallocated 메모리를 해제해야 합니까? something = (char**) malloc (x * sizeof(char*)); for (i = 0; i < x; i++) something[i] = (char*) malloc (y + 1); ... if (anything == NULL) { printf("Your input is wrong!"); // should I free memory of every mallocated entity now? exit(1); } else { // work with mallocated entities ... free(something); // it must be here system("..

programing 2023.06.06

C에서 'a'가 int인데 왜 (char)의 크기가 1입니까?

C에서 'a'가 int인데 왜 (char)의 크기가 1입니까? 나는 노력했다. printf("%d, %d\n", sizeof(char), sizeof('c')); 1, 4를 출력으로 받았습니다.캐릭터의 크기가 1이면, 왜?'c'4개 주세요?정수라서 그런 것 같아요.그래서 내가 할 때char ch = 'c';후드 아래에서 char 변수에 할당될 때 4바이트 값에서 1바이트 값으로 암시적 변환이 발생합니까?C에서 'a'는 정수 상수(!?)이므로 아키텍처에 대해 4가 맞습니다.할당을 위해 암묵적으로 char로 변환됩니다. size of (char)는 정의상 항상 1입니다.표준에는 1단위가 무엇인지는 나와 있지 않지만, 종종 바이트입니다.C 표준은 'a'와 같은 문자 리터럴이 char 유형이 아닌 int 유형이..

programing 2023.06.06

무료 모드버스로 여러 클라이언트 호스팅

무료 모드버스로 여러 클라이언트 호스팅 저는 TCP를 통해 Modbus를 통해 PC와 통신하는 마이크로컨트롤러 관련 프로젝트를 진행하고 있습니다.제 플랫폼은 STM32F4 칩으로, RTOS 없이 C로 프로그래밍합니다.주변을 둘러보니 LwIP와 프리모드버스가 있었고 둘 다 잘 작동하도록 하는 데 꽤 성공했습니다.안타깝게도, 저는 지금 어떻게 대처해야 할지 모르는 몇 가지 문제에 부딪히고 있습니다. 연결을 설정한 다음 연결이 끊어지면(이더넷 케이블을 분리하여) 다시 연결할 수 없습니다(물론 다시 연결한 후에는).Freemodbus는 하나의 클라이언트만 허용하고 첫 번째 클라이언트는 여전히 등록되어 있습니다.연결을 시도하는 모든 새 클라이언트는 무시됩니다.TCP/IP 표준인 특정 시간 초과 기간이 지나야 첫 ..

programing 2023.06.06

당신은 C에서 리눅스에서 논블로킹 콘솔 I/O를 어떻게 합니까?

당신은 C에서 리눅스에서 논블로킹 콘솔 I/O를 어떻게 합니까? C의 Linux/OS X에서 논블로킹 콘솔 IO를 어떻게 수행합니까?예를 하나 추가합니다. #include #include #include int main(int argc, char const *argv[]) { char buf[20]; fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); sleep(4); int numRead = read(0, buf, 4); if (numRead > 0) { printf("You said: %s", buf); } } 이 프로그램을 실행하면 표준 입력을 제공하는 데 4초가 걸립니다.입력을 찾을 수 없으면 반환됩니다. 2개의 샘플 실행: $ ./a.out fda You ..

programing 2023.06.06

C로 ':-!!'은 뭐예요?

C로 ':-!!'은 뭐예요? 이 이상한 매크로 코드를 /usr/include/linux/커널에서 우연히 발견했습니다.h: /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used e.g. in a structure initializer (or where-ever else comma expressions aren't permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)s..

programing 2023.04.22