2009-12-23 4 views
2

기본 브라우저에서 URL을 열려면 '긍정적 인'방법이 있습니까? 나는 GNU/Linux와 MAC에서 작동하는Posixy 방식으로 브라우저를 시작 하시겠습니까?

ShellExecute(0, _T("open"), url, 0, 0, SW_SHOWDEFAULT); 

과 같은 것을하고 싶습니다. 나는 '

if (fork() == 0) 
    system("sensible-browser http://wherever.com"); 

적어도 데비안 시스템에서 그 트릭을 말하는 대답을 읽었습니다. 이것을 다른 배포판에서 작동하는 것으로 확장하는 쉬운 방법이 있습니까? Mac OS X?

+0

나는 사본에 관하여 그것을 가지고 간다. 관련 링크 : http://stackoverflow.com/questions/1949531/finding-the-preferred-application-for-a-given-file-extension-via-unix-shell-comma – dmckee

+0

에 대한 Posix 지원에 의존하지 않겠습니다. MacOSX는 사용자가 기대하는 바를 깨기 때문에 그러한 일을합니다. –

답변

2

Mac의 경우 open 명령을 사용할 수 있습니다. 터미널의 open http://www.google.com이 나를위한 새로운 Chrome 탭을 엽니 다. 그냥 system 전화로 마무리하십시오.

1

편도는 $ BROWSER 변수 일 수 있습니다. Xorg는 xrdb을 제공합니다.이 환경은이 환경에 가장 적합한 방법이지만, Mac OS X에서는 어디에서나 사용할 수 있습니다.

2

사용자의 브라우저 환경 설정은 실제로 내가 아는 POSIX 표준과 관련된 것이 아닙니다.

1

이 방법을 구현하는 방법은 없습니다. Mac OS X에서 해결 방법은 LSOpenCFURLRef 또는 다른 LaunchServices API를 사용하여 URL 스키마의 기본 처리기로 URL을 여는 것입니다. 다른 플랫폼은 일을 다르게 할 것입니다.

3

Linux의 경우 xdg-open 명령을 사용하여 URL을 시작해야합니다. 새로운 배포판은 명령이 호출 될 때 사용자가 선호하는 브라우저를 시작해야합니다. GUI가 실행되지 않으면 링크를 실행하려고 시도합니다.

분명히 GUI 데스크탑 환경과 관련하여 POSIX에는 아무 것도 없습니다. freedesktop.org와 같은 프로젝트가 그 역할을 수행합니다. GNOME과 KDE와 같은 모든 유닉스 계열 데스크탑에서 작동 할 수있는 몇 가지 기본 기능을 정의하려고 시도합니다.

exec() 대신 fork()와 calling system()을 사용하는 것은 POSIX에서 정의되지 않은 동작이므로 권장하지 않습니다.

+0

그래서 system()은 상위 프로세스에만 정의되어 있습니까? 나는 당신의 잘못을 말하고있는 것이 아니지만, 갈래의 프로세스가 자체 주소 공간과 모든 것을 가지고 있기 때문에 왜 이해가되지 않습니다. 내게 당신이 포크 후 printf()를 사용하는 것을 말하는 것과 같다. – SiegeX

+0

fork() 후에 POSIX에서 system()이 정의되지 않은 동작을하는 이유를 알 수 없습니다. POSIX 표준의 관련 부분을 인용 할 수 있습니까? 감사. – Chris

+0

Fork() 뒤에 exec()가 와야합니다. 그 사이에 비동기 신호 안전 기능 만 호출 할 수 있습니다. System()은 비동기 신호 안전성이 보장되지 않으며 printf도 안전하지 않습니다. – karunski

관련 문제