2012-09-06 2 views
1

저는 C로 매우 익숙하며 다른 언어에는 익숙하지 않습니다 :/ uni에서의 과제에 대해서는이 작은 부분에 조금 붙어 있습니다. 필자는 기본적으로 다음과 같이 4 개의 선택적 인수가있는 'ls'함수를 작성해야합니다.선택적 인수, 경로 이름 또는 파일을 구별합니까? C 언어

list [-l] [-f] [pathname] [localfile] 

이제 처음 두 개는 직설적입니다. 일을 더 어렵게 만들려면 'localfile'이 반드시 존재하지 않아야하고 '경로명'(주어진 경우)이 소켓을 통해 서버에 연결될 것입니다 (그래서 파일인지 체크합니다). 경로명은 out이다). 나는 '.txt'또는 이와 유사한 문자열에 대해 마지막 4자를 확인했다. 저는 실제로 문제를 완전히 해결할 수 없으며 해결책을 찾을 수 없다면 내일이 코스 컨베이어에이 문제를 제시 할 것입니다.

이것은 실제로해야 할 일 중 아주 작은 부분이지만 올바른 방향으로 어떤 방향으로 나아질 수는 있습니다.

+9

당신은 확실히 배우고 사랑하고 배우기를 원합니다. –

+0

Windows 또는 Linux에 있습니까? – Scooter

+0

리눅스는 분명히 그것을 가지고 있으며 윈도우즈에 대한 근본적인 제한을 알지 못합니다. arg_parse 함수가 있습니다. http://www.gnu.org/software/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments – aisbaa

답변

0

명령 줄 인수를 얻으려면 argc와 argv를 처리해야합니다. 이것이 올바른 일임을 확인하고 무엇이 요구되는지를 결정하는 것입니다. dirent.h를 -

int main(int argc, char *argv[]) 

당신이 리눅스/유닉스에있는 가정하면, 디렉토리 기능했던 opendir()를/readdir은()/closedir()를 사용해야합니다. stat() 기능은 -l 요구 사항을 충족시키는 데 필요합니다. access()은 파일이 존재하는지 확인한 다음 stat()이 파일이 일반 파일인지 디렉토리인지 알려줍니다.

4 개의 선택적 인수를 보유하고 argc 및 argv를 매개 변수로 취하는 "process_arguments"라는 함수에서 구조체를 반환합니다. 소켓 연결에 대한 요구 사항으로

struct args { 
    bool valid; 
    bool l_option; 
    bool f_option 
    char directory[200]; 
    char filename[200]; 
} 

서버와이 지역 프로그램의 요청을 처리하기 위해 포크 것이라는 "클라이언트 프로그램"에서 실행 계속 될 것 "서버 프로그램"을 작성해야합니다 . 소켓 프로그램 예제를 찾아보십시오.

경로 문자열 또는 파일 이름이 있는지 여부를 확인하기 위해 서버가 Unix/Linux 인 경우 경로 구분 문자 ('/')를 찾습니다. 이 구성표에는 파일 이름에 경로 구분 기호가 없어야하므로 경로가 있음을 알려줍니다.

+0

그것은 리눅스 (cygwin의)하지만 결국은 윈도우와 호환해야합니다. 하지만 리눅스는 지금 당장이다. 나는 이미 'command'를 결정하기위한 코드를 작성했고 인수의 * argsList []가 추출되었습니다. 경로명이나 파일이 있는지 어떻게 결정해야하는지 궁금합니다. '-l'인수에 stat()를 사용할 것입니다. – RileyVanZeeland

+0

@RileyVanZeeland 경로가 아닌 파일 이름을 지정할 수 있습니까? 그렇다면, 나는 소켓 물건을 할 것이고 그 CD가 그 값인 것처럼 CD를 시도하고 그것이 성공하면 볼 수있다. 성공 = 디렉토리, 실패 = 파일. – Scooter

+0

@RileyVanZeeland 서버 컴퓨터에서 실행중인 "소켓 서버 프로그램"이 필요합니다.서버 프로그램 (그리고 포크 클라이언트)이 처리해야 할 요청 중 하나는 "is this directory"또는 "CD to this directory"이며 성공한 요청입니까? 따라서 알 수없는 문자열을 서버로 보내서 디렉토리인지 아닌지를 결정하십시오. – Scooter