반응형

C 40

printk와 pr_info의 차이

printk와 pr_info의 차이 그 사이의 정확한 차이점은 무엇입니까?printk그리고.pr_info함수?그리고 어떤 조건에서 둘 중에 하나를 선택해야 합니까?커널의 printk.h는 다음과 같습니다. #define pr_info(fmt,arg...) \ printk(KERN_INFO fmt,##arg) 이름 그대로.pr_info()가printk()와 함께KERN_INFO우선 순위.구체적으로 볼 때pr_info, 그 정의는 차례로 사용될 것입니다.printk(KERN_INFO ...(barcelona_delpy의 답변에서 언급된 바와 같이); 그러나 답변의 소스 스니펫은 형식 래퍼를 제외한 것으로 보입니다.pr_fmt(fmt)(LP 댓글에서 언급한 바와 같이). 사용할 수 있는 이유의 차이pr_inf..

source 2023.11.07

리눅스에서 syscall 기능을 다시 구현(또는 랩)하려면 어떻게 해야 합니까?

리눅스에서 syscall 기능을 다시 구현(또는 랩)하려면 어떻게 해야 합니까? 열려 있는() 시스템 호출을 완전히 인계받고 실제 syscall을 랩핑하고 로깅을 수행하려고 합니다.LD_PRELOAD를 사용하여 열린() 진입점을 대신하는 (사용자가 만든) 공유 객체 라이브러리를 로드하는 것도 한 방법입니다. 사용자가 만든 open() 루틴은 glibc 함수에 대한 포인터를 가져옵니다.open()타고dlsym()그것을 호출하고, 그것을 호출합니다. 그러나 위에서 제안된 해결책은 동적인 해결책입니다.내가 내 것을 연결하고 싶다고 가정해 보겠습니다.open()정적 포장지제가 어떻게 하죠?메커니즘은 동일하지만 사용자 정의 간에 심볼 충돌이 있을 것으로 추측합니다.open()그리고 libc.open(). 같은 목..

source 2023.11.02

static_assert를 사용하여 매크로에 전달된 유형을 확인합니다.

static_assert를 사용하여 매크로에 전달된 유형을 확인합니다. 불행하게도 제 라이브러리의 원래 버전에서 꽤 미친 C를 사용한 매크로가 몇 개 남아 있습니다.특히, 저는 특정한 종류가 자신에게 전달되기를 기대하는 일련의 매크로를 가지고 있습니다.다음과 같은 작업을 수행할 수 있습니까? static_assert(decltype(retval) == bool); 어떻게?현명한 대안이 있습니까? 네 매크로가 나쁘다는 것을 알고 있습니다.C++는 C 등이 아닌 것으로 알고 있습니다. 업데이트 0 여기 관련된 코드와 소스 파일이 있습니다.제안을 환영합니다.원래 질문은 그대로입니다.@UncleBens 제안을 사용하면 가장 깨끗하다는 것을 알 수 있었습니다. #include static_assert(std::i..

source 2023.11.02

변수 또는 매크로 할당을 열에서 클랜 형식으로 정렬할 수 있습니까?

변수 또는 매크로 할당을 열에서 클랜 형식으로 정렬할 수 있습니까? 열에 클랜 형식의 정렬 변수 할당을 가질 수 있습니까?예를 들어, int someInteger = 42; std::string someString = "string"; const unsigned someUnsigned = 42; #define SOME_INTEGER 42 #define SOME_STRING_LITERAL "string" #define SOME_CONSTANT 42 enum Enum { ONE = 1, TWO = 2, THREE = 3, FOUR = 4, FIVE = 5, SIX = 6, SEVEN = 7 }; 다음보다 가독성이 뛰어납니다. int someInteger = 42; const unsigned someUnsig..

source 2023.11.02

strerror_r은 어떤 사이즈를 허용해야 합니까?

strerror_r은 어떤 사이즈를 허용해야 합니까? OpenGroup POSIX.1-2001은 Linux Standard Base Core Specification 3.1과 마찬가지로 strerror_r을 정의합니다.그러나 오류 메시지에 대해 합리적으로 예상할 수 있는 최대 크기에 대한 참조를 찾을 수 없습니다.코드에 넣을 수 있는 정의를 기대했지만 찾을 수 있는 정의가 없습니다. 코드는 스레드 세이프여야 합니다.그렇기 때문에 strererror_r이 사용되고 strererror는 사용되지 않습니다. 제가 사용할 수 있는 기호를 아는 사람이 있습니까?나만의 것을 만들어야 할까요? 예 int result = gethostname(p_buffy, size_buffy); int errsv = errno; i..

source 2023.11.02

정의되지 않은 동작은 얼마나 정의되지 않습니까?

정의되지 않은 동작은 얼마나 정의되지 않습니까? 저는 정의되지 않은 행동이 프로그램을 위험에 빠뜨릴 수 있는 정도를 잘 이해하지 못합니다. 내게 이런 코드가 있다고 치자. #include int main() { int v = 0; scanf("%d", &v); if (v != 0) { int *p; *p = v; // Oops } return v; } 이 프로그램의 동작은 다음과 같은 경우에만 정의되지 않습니까?v0이 아님 또는 다음과 같은 경우에도 정의되지 않음v0까입니까?사용자가 0과 다른 숫자를 삽입하는 경우에만 동작이 정의되지 않습니다.결국, 불쾌 코드 섹션이 실제로 실행되지 않으면 UB에 대한 조건이 충족되지 않습니다(즉, 초기화되지 않은 포인터는 생성되지도 않고 참조되지도 않음). 이에 대한 ..

source 2023.10.28

반면 (1); C에 정의되지 않은 동작이 있습니까?

반면 (1); C에 정의되지 않은 동작이 있습니까? C++11에서는 Undefined Behavior 이지만 C에서는while(1);정의되지 않은 동작입니까?그것은 명확한 행동입니다.C11에서 새로운 조항 6.8.5 ad 6이 추가되었습니다. 제어 표현식이 상수 표현식이 아니며,156) 입출력 동작을 수행하지 않으며, 휘발성 객체에 접근하지 않으며, 본체 내에서 동기화 또는 원자 동작을 수행하지 않으며, 표현식을 제어하거나, (a for문의 경우) 표현식-3,종료할 이행 상황을 가정할 수 있습니다.157) 157)이것은 종료를 증명할 수 없는 경우에도 빈 루프를 제거하는 것과 같은 컴파일러 변환을 허용하기 위한 것입니다. 루프의 제어 표현은 상수이므로 컴파일러는 루프가 종료된다고 가정하지 않을 수 있습니..

source 2023.10.28

블록 댓글 작성에 #if 0을 사용하는 이유는 무엇입니까?

블록 댓글 작성에 #if 0을 사용하는 이유는 무엇입니까? 역공학 코드를 사용하면 스타일에 약간 겁이 나지만, 이런 일을 할 이유가 없는지 확인하고 싶었습니다. 저만 그런 건가요 아니면 끔찍한 코딩 스타일인가요? if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name); else sprintf(username,"%d",user_id); 그리고 왜 랩 코드가 컴파일을 위한 것이 아니었습니까? #if 0 .... #endif 댓글 대신에? 편집: 그래서 아래에 설명된 것처럼, 이것은 내가 미처 깨닫지 못했던 /* */의 실패 가능성 때문입니다. 하지만 나는 여전히 이해할 수 없습니다. 프로그래밍 환경 도구나 좋아하는 텍스트 편집기의 매크로를 사용하여 "/"를 사용하여 댓글을..

source 2023.10.23

JSON RESTful 서비스를 C/C++에서 구현하는 방법

JSON RESTful 서비스를 C/C++에서 구현하는 방법 저는 C/C++에서 JSON Restful 웹 서비스를 하려고 합니다.저는 XML serialization/deserialization에는 적합하지만 JSON에는 적합하지 않은 Axis2/C와 Staff를 사용해 보았습니다.허브 서터의 블로그에 소개된 카사블랑카를 보고 싶을지도 모릅니다.c로 휴식 서비스를 만드는 것을 지원하는 라이브러리는 소수입니다. 예를 들어 restinio: #include int main() { restinio::run( restinio::on_this_thread() .port(8080) .address("localhost") .request_handler([](auto req) { return req->create_r..

source 2023.10.23

Linux 정적 라이브러리에서 기호 제한

Linux 정적 라이브러리에서 기호 제한 Linux 정적 라이브러리(아카이브)로 내보내는 C 심볼의 수를 제한하는 방법을 찾고 있습니다.도서관 공식 API에 포함된 기호들로만 제한하고 싶습니다.저는 이미 'static'을 사용하여 대부분의 함수를 static으로 선언하지만, 이는 파일 범위로 제한합니다.도서관으로 범위를 제한하는 방법을 찾고 있습니다. Ulrich Drepper의 How to Write Shared Libraries의 기법을 사용하여 공유 라이브러리에 대해 이 작업을 수행할 수 있지만 정적 아카이브에는 이 기법을 적용할 수 없습니다.그는 그의 초기 도서관 설계 모범 사례 논문에서 다음과 같이 쓰고 있습니다. 유일한 방법은 'ld -r'을 사용하여 특정 내부 자원이 필요한 모든 객체 파일을..

source 2023.10.23
반응형