1
는 다음 코드와 nftw
를 사용하여 디렉토리 트리에있는 모든 .c 인 파일을 얻으려고 : 그것은 리눅스와 솔라리스에서 작동BSD에서 nftw가 다릅니 까?
static int gf(const char *path, const struct stat *st, int t, struct FTW *ftw) {
if (t != FTW_F)
return 0;
if (strcmp(ext(path), ".c") == 0)
addl(&files, dup(abspath(path)));
return 0;
}
void getfiles(char *path) {
nftw(path, gf, 255, FTW_PHYS);
}
하지만, PC-BSD에 그것은 단순히 어떤 따기하지 않음으로써 실패 파일. 내가 뭘 놓치고 있니?
strdup에 실제로 "dup"이름을 사용 했습니까? 그것은 일어날 재앙처럼 보인다! dup2가 두 개의 문자열을 복사합니까? –
문자열에 대한 자체 메모리 관리를하고 있습니다. dup은 일반적인 메모리 관리자의 오버 헤드없이 strdup과 기본적으로 동일한 작업을 수행하는 함수입니다. 하지만 그 함수에 버그가 있더라도, 관찰 된 행동을 설명하지는 않습니다. 왜냐하면 내가 실행중인 테스트는 기본적으로 addl이 호출되었는지 여부 만 검사하기 때문입니다. – rwallace
그러나 dup은 파일 디스크립터를 복제하는 표준 라이브러리 함수이므로 끔찍한 이름입니다. –