2017-05-07 13 views
0

리눅스에서 실행되는 C로 작은 쉘을 작성하고 있습니다. 관련 dups가 많이 있기 때문에 위치 0에있는 내용을 인쇄 할 수있는 방법이 있는지 묻고 싶습니다. 예를 들어 dup2 (file_name, 0)을 호출하면이라는 파일 이름을 인쇄하는 방법이 있습니다. 디버깅에 사용할 수 있습니까?C 어떤 파일이 dup2를 사용한 후에 기본 stdin에 출력합니까?

답변

1

dup2에서 파일 이름을 가져올 수 없습니다.

int dup2(int fildes, int fildes2); 

당신이 리눅스에서 할 수있는 것은 :

당신은/proc 디렉토리에 readlink을 사용할 수 있습니다/자기/FD/NNN NNN은 당신이 here을 읽을 수 있듯이 그것은 단지 int 값을 반환 파일 설명자. 그것이로 가

[here]을 연 또는 당신이 filenamefildes을 assosiate 수있는 창조적 인 뭔가가 struct을 만들 때, 이렇게하면 파일의 이름을 제공 할 것입니다. 이 같은

뭔가 : 한 다음 더있는 경우

struct Files{ 
    int fildes; 
    char filename[50]; 
} files; 

단지 배열을 생성하고 모든 시간을 필요로하는 일을; 그런 식으로 항상 filename으로 매핑 할 수 있습니다.

+0

참고. –

+0

@ JonathanLeffler하지만이 답변은 Linux에만 해당됩니다. OP는 리눅스를 요구했다. 내가 아무렇게나 편지를 써야한다고 생각하니? – granmirupa

+0

태그에 없는데도 리눅스가이 질문에 언급되지 않았다. 너 괜찮아. –

1

리눅스 운영 체제를 사용하는 경우 파일 설명 테이블을 쉽게 표시 할 수 있습니다. 프로세스 ID가인 프로세스 설명 파일 테이블을 사용하여 프로세스 ID, fd 폴더별로/proc/디렉토리에 저장된 모든 프로세스를 쉽게 찾을 수 있습니다. 유닉스의 모든 버전이`/ proc` 파일 시스템을 지원하는 것이

ls -l /proc/1405/fd 

outputlooks like this image