2013-01-23 2 views
2

sys/queue.h은 4.4BSD에서 처음 나타났습니다. Linux는 배포판에 포함 시켰지만 버전은 최신 버전이 아닙니다.리눅스 버전 sys/queue.h 헤더 파일을 어디에서 찾을 수 있습니까?

FreeBSD version은 단일 연결 목록, 단일 연결 꼬리 대기열, 목록 및 꼬리 대기열을 구현합니다. Linux version은 목록, 꼬리 대기열 및 순환 대기열을 구현합니다.

내 Ubuntu PC에 libbsd-dev 패키지를 설치 한 다음 이 /usr/include/bsd/sys/queue.h에 있음을 발견했습니다.

내 질문 :이 헤더 파일의 리눅스 버전을 찾을 수 있습니다

  • ?

  • 두 구현의 주된 차이점은 무엇입니까? 버전은 이며입니다. BSD 님의 버전이 무엇입니까?

+1

이 파일은'/ usr/include/i386-linux-gnu/sys/queue.h'에 있습니다. – knittl

+0

'locate queue.h' –

+0

위치는 배포본에 따라 다릅니다. 데비안 시스템에서 queue.h는 linux-headers 패키지에 있습니다. – Martin

답변

1

그들은 동일한 조상을 공유하지만 그 안에서 이루어진 모든 개발이 오래전에 분기 된 것처럼 보입니다.

프로젝트에서 사용하고 싶다면 프로젝트에서 가장 좋아하는 것을 복사하여 사용하는 것이 가장 좋습니다. 그것을 제공하는 시스템에 의존하지 마십시오. 이것은 많은 매크로가있는 헤더 파일 일 뿐이며 라이브러리 나 의존성이 필요하지 않으며 운영 체제와 관련이 없습니다. 나는 보통 내 프로젝트를 위해 OpenBSD에서 가져온다.

0

Linux 버전이 심각하게 오래된 것 같습니다. CIRCLEQ는 2001 년 이래로 BSD에서 오히려 강력하게 반대되어 왔으며 구현이 여전히 queue.h에 있더라도 문서에서 제거되었다. 우리는 더 나은 성능/적은 문제/saner 구현으로 동일한 기능을 제공하는 TAILQ를 사용해야합니다.

한편 Linux에서도 여전히 문서화되어 있지만 kconfig에서 CIRCLEQ에서 TAILQ로 BSD 지원 중단을 이유로 변경 사항을 찾을 수 있습니다.

CIRCLEQ의 구체적인 문제는 특정 노드를 목록 노드와 다르게 사용하지만 어쨌든 노드로 연결되는 것 같습니다. 그래서 헤드 포인터가 유지되어야하고 모든 노드 액세스시 검사되어 노드가 헤드인지 확인해야합니다. 따라서 두 가지 문제가 있습니다. 모든 액세스시 검사하고 헤드 포인터를 가까이두고 레지스터 또는 캐시를 가져갈 필요가 있습니다.