기본적으로 다음과 같은 작업을 수행하는 C# 응용 프로그램을 작성 중입니다.목록. 그런데 이식하는 데 문제가 있습니다.IOCTL.NET에 전화하세요. 내 말은, 내가 지금까지 작성한 interop 코드(내 .NET 응용 프로그램이 이 관리되지 않는 시스템 코드를 호출할 수 있도록 하기 위해)는 성공적인 ioctl 호출을 수행하지 못하고 항상 -1을 오류로 반환한다는 뜻입니다. Linux의 Visual Studio Code에서 iwlist를 디버깅할 때 항상 호출이 표시되는 것을 확인했습니다.소켓(2,2,0)은 파일 설명자 3을 반환합니다.
정확히 동일한 매개변수를 사용하여 내 C# 애플리케이션에서 동일한 호출을 실행하면 200개 이상의 범위에 있는 파일 설명자가 반환됩니다.
iwlist에 대한 추가 ioctl 호출은 반환된 소켓을 입력 매개 변수로 사용하므로 이것이 자체적으로 내 문제를 나타내는지 궁금합니다. 즉, 소켓이 열릴 때 원본 iwlist 코드가 항상 파일 설명자 3을 가져오고 C# 응용 프로그램이 파일 설명자 3을 가져오지 않을 때 이식된 C# iwlist 코드가 실행될 것으로 예상해야 합니까?
문서에서:
성공적인 호출에 의해 반환된 파일 설명자는 현재 프로세스에 대해 열려 있지 않은 가장 낮은 번호의 파일 설명자가 됩니다.
그렇다면 디버깅할 때 항상 동일한 파일 설명자를 얻는 이유는 무엇입니까?
답변1
새 파일 설명자를 반환하는 대부분의 POSIX 라이브러리 함수는 사용되지 않은 최소 설명자 번호를 할당합니다. 주목할만한 예외 중 하나는 설명 dup2
자를 특정 숫자에 복사하는 것이 목적인 함수 입니다 .dup2(old, new)
new
socket
설명자를 반환하기 위해 일부 매개변수를 사용하여 호출하는 루프를 작성하고 close
해당 설명자를 사용하며 다른 스레드가 설명자를 할당하거나 삭제하지 않는 경우 socket
매번 동일한 설명자 번호가 반환되어야 합니다.
숫자는 매번 다른 개체를 참조합니다. 이는 해제된 메모리 할당을 재사용하는 것과 유사합니다.