파일을 두 번 클릭하여 응용 프로그램에 시스템 매개변수를 가져옵니다.

파일을 두 번 클릭하여 응용 프로그램에 시스템 매개변수를 가져옵니다.

두 번 클릭하면 파일 브라우저가 열리는 LINUX용 C++ 이미지 프로세서를 만들었습니다. filename 인수를 사용하여 명령줄에서 실행하면 파일이 열립니다. 내 프로그램을 사용하여 이미지 확장명이 있는 파일이 열리도록 시스템을 구성했습니다. 불행하게도 명령줄에서 파일 이름을 사용하여 시작할 때처럼 파일을 여는 대신 내 프로그램은 파일 이름 인수가 프로그램에 전달되지 않은 것처럼 작동하고 파일 브라우저를 엽니다.

내 질문은 내 프로그램에서 열린 이미지 파일을 두 번 클릭할 때 운영 체제에서 내 프로그램으로 파일 이름 매개변수를 어떻게 가져오나요?입니다. 이 정보는 어디서도 찾을 수 없습니다. 파일 이름이 argv[1]에 있다고 가정했지만 그렇지 않은 것 같습니다. 이 프로그램을 실행하는 데 터미널이 필요하지 않습니다.

저는 최신 버전인 CENTOS/Linux 7에서 Gnome 데스크탑을 실행하고 있습니다. 작동하는 바탕 화면 아이콘을 설정하고 해당 아이콘을 클릭하여 응용 프로그램을 실행합니다. 문제는 이미지 파일을 두 번 클릭하면 해당 이름이 응용 프로그램에 도달할 수 없어 브라우저가 나타나는 것입니다. 터미널에서 실행할 때 모든 명령줄 매개변수가 제대로 작동하기 때문에 이는 신비스럽습니다. 가장 큰 질문은 "시스템이 두 번 클릭한 파일의 파일 이름을 어디에 저장합니까?"입니다.

감사해요.

답변1

답변2

해결됨: 응용 프로그램은 명령 파일이나 다른 프로세스의 스트림을 통해 스크립트 이미지 로드 및 합성 명령을 받아들일 수 있습니다. 이를 달성하기 위해 애플리케이션은 매개변수를 처리하기 전에 의사결정 트리 상단에 있는 poll() 시스템 호출을 통해 STDIN을 폴링합니다. STDIN이 비어 있지 않으면 애플리케이션의 명령 스트림이 포함되어 있다고 가정합니다. 이로 인해 운영 체제는 애플리케이션을 호스팅하기 위해 새로운 셸 프로세스를 생성합니다. poll() 시스템 호출을 매개변수 처리 결정 트리의 끝으로 이동하면 소프트웨어가 예상대로 작동합니다. poll() 시스템 호출이 STDIN이 비어 있는지 테스트하는 가장 좋은 방법인지는 확실하지 않지만 이 목적으로는 작동하는 것 같습니다. 결론: 프로그래밍 설계 오류. 이렇게 막연한 질문을 올려서 죄송합니다.

관련 정보