문제

어렵지 않아야합니까? 오른쪽?

나는 현재 pioctl의 헤더 정의를 찾기 위해 OpenAFS 코드베이스를 트롤링하고 있습니다. 내가 얻은 모든 것을 버렸다 : 확인 된 ctags, pioctl의 소스 코드를 grep했다. 사용자 공간 코드 중 어느 것도 직접적으로 포함하지 않기 때문에 실제로 내가 원하는 것은 아닙니다.

이제 OpenAFS 코드베이스를 다운로드하여 헤더 파일을 찾을 것으로 기대하지 않습니다. 그래도 궁금합니다. 다른 모든 것이 실패 할 때 필요한 헤더 파일을 찾는 기술은 무엇입니까? 코드베이스의 PIOCTL에 대한 GREP가 실제로 함수 정의처럼 보이는 것을 제시하지 못하게 할 수있는 최악의 시나리오는 무엇입니까?

또한 제대로 수행 한 두 개의 독립 사용자 공간 프로그램에 액세스 할 수 있으므로 이론적으로는 O (n) 기능을 검색 할 수 있습니다. 그러나 헤더 파일 중 어느 것도 나에게 튀어 나오지 않고 N이 크지 않습니다 ...

편집하다: 즉각적인 문제가 해결되었습니다. pioctl ()는 다음과 같이 표시된대로 암시 적으로 정의됩니다.

AFS.xs:2796: error: implicit declaration of function ‘pioctl’
도움이 되었습니까?

해결책

만약에 grep -r 그리고 ctags 실패하고, 아마도 불쾌한 매크로의 결과로 정의되고있을 것입니다. 호출하는 가장 간단한 파일을 만들 수 있습니다. pioctl() 성공적으로 컴파일 한 다음 전처리하여 어떤 일이 발생하는지 확인하십시오.

gcc -E test.c -o test.i
grep pioctl -C10 test.i

다른 팁

전처리 출력을 보여주는 컴파일러 옵션이 있습니다. 시도해 보시겠습니까? 내 머리가 가능한 정의가 완전히 비어있는 끔찍한 핀치에서 -e 옵션 (대부분의 C 컴파일러에서)은 전처리 코드를 제거하는 것 외에는 아무것도하지 않습니다.

요청 된 정보에 따라: 일반적으로 화면에서 출력되므로 문제의 파일 컴파일을 캡처합니다. 빠른 복사 및 붙여 넣기를하고 컴파일러 호출 직후 -e를 넣습니다. 결과는 화면에 사전 처리기 출력을 뿌려 파일로 리디렉션됩니다. 모든 매크로와 바보 같은 것들이 이미 처리 된 것처럼 그 파일을 살펴보십시오.

최악의 시나리오 :

  • K & R 스타일 프로토 타입
  • 매크로는 정의를 숨기고 있습니다
  • 암시 적 선언 (답변에 따라)

사용을 고려 했습니까? cscope (이용 가능 Sourceforge)?

나는 상당히 중요한 코드 세트 (25,000 개 이상의 파일, 파일에서 최대 약 20,000 줄까지)에 사용하여 성공했습니다. 고대 Sun E450에서 교차 참조를 구축하려면 파일 목록 (5-10 분)과 더 긴 (20-30 분)를 도출하는 데 시간이 걸리지 만 결과는 유용합니다.


거의 똑같이 고대 MAC (이중 1GHz PPC 32 비트 프로세서)에서 CSCOPE는 OpenAFS (1.5.59) 소스 코드에서 실행됩니다. 소스 코드는 기능이 선언되는 많은 장소가 있습니다. . 4949 파일을 스캔하여 58MB CSCOPE.out 파일을 생성하는 데 몇 분이 걸렸습니다.

  • OpenAFS-1.5.59/SRC/SYS/SYS_PROTOTYPES.H
  • OpenAFS-1.5.59/src/aklog/aklog_main.c ( "AFS가 왜 이러한 프로토 타입을 제공하지 않습니까?"
  • OpenAFS-1.5.59/src/sys/pioctl_nt.h
  • OpenAFS-1.5.59/src/auth/ktc.c pioctl에 대한 정의 포함
  • OpenAFS-1.5.59/src/sys/pioctl_nt.c는 IT 구현을 제공합니다.
  • OpenAFS-1.5.59/src/sys/rmtsysc.c는 IT의 구현을 제공합니다 (때로는 AFS_PIOCTL () 대신)

발견 된 184 개의 인스턴스의 나머지 부분은 함수 또는 문서 참조 또는 노트를 릴리스, 로그 변경 등으로 사용하는 것으로 보입니다.

우리가 결정한 현재 작업 이론은 사전 프로세서에서 찌르고 아무것도 찾지 못한 후 OpenAFS가 컴파일러가 기능의 프로토 타입을 추론하고, 정수를 반환하고 포인터, 정수, 포인터, 정수를 가져 가기 때문에 기능의 프로토 타입을 추론하게한다는 것입니다. 매개 변수로. 나는 단지 그것을 직접 정의함으로써 이것을 다룰 것입니다.

편집하다: 훌륭한! 흡연 총을 찾았습니다.

AFS.xs:2796: error: implicit declaration of function ‘pioctl’

원래 일반적인 질문에 대한 답변이 응답되었지만, 누군가이 페이지에 도착하면 pioctl을 정의하는 헤더 파일을 어디에서 찾을 수 있는지 궁금합니다.

OpenAFS (1.6.7)의 전류 릴리스에서, pioctl에 대한 protoype는 sys_prototypes.h에 정의된다. 그러나이 질문이 원래 묻는 시간, 그 파일은 존재하지 않았으며 OpenAFS 코드 트리 외부에서 볼 수있는 pioctl에 대한 프로토 타입은 없었습니다.

그러나 PIOCTL의 대부분의 사용자는 아마도 LPIOCTL ( "로컬"PIOCTL)을 원하거나 최소한 사용하는 것이 좋을 것입니다. afssyscalls.h에는 이것에 대한 프로토 타입이 있습니다 (그리고 요즘에는 sys_prototypes.h).

그러나 요즘 가장 쉬운 옵션은 Libkopenaf를 사용하는 것입니다. 이를 위해 kopenafs.h를 포함시키고 K_PIOCTL 함수를 사용하고 -lkopenafs에 연결하십시오. 그것은 OpenAfs libsys 및 기타 물건과 연결하는 것보다 훨씬 더 편리한 인터페이스 인 경향이 있습니다.

일반적으로 남자 페이지 시놉시스에서 말하지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top