2009-11-10 4 views
1

대화식 UNIX (http://en.wikipedia.org/wiki/INTERACTIVE_UNIX) 용 프로그램을 작성하겠습니다. 그러나 1 년 후에는 Windows로 포팅 될 것입니다. ANSI C 및/또는 SH 스크립트로 작성합니다. Windows에서 실행되면 Windows 서비스로 실행됩니다. 가능한 한 쉽게 어떻게 만들 수 있습니까?유닉스 및 윈도우 용 응용 프로그램 작성

포팅 할 때 가능한 한 조금 변경하고 싶지만 코드를 잘 작성하고 싶습니다.

불행하게도, 대화 형 유닉스는 이미 휴대하는 기존 시스템과

+0

조금 명확히 할 수 있습니까? 유닉스에서는 대화식이되지만 Windows에서는 서비스가 될 것입니까? –

+0

유닉스에서도 서비스 될 것입니다. 실행중인 시스템은 대화 형 Unix (en.wikipedia.org/wiki/INTERACTIVE_UNIX) – magol

답변

3

당신도 SH 스크립트에서이 일을 고려하고 있다면, 당신은 파이썬에 심각한 고려를/빈/sh를 제공해야한다 존재하는 유일한 쉘입니다 .

+0

입니다. 유감스럽게도 Interactive UNIX는 이전 시스템이며 존재하는 유일한 쉘은/bin/sh입니다. – magol

2
  • 포트 초기에 자주
  • 캡슐화 아닌 휴대용 코드입니다. (코드 전체에 너무 많은 #ifdef를 분산시키지 마십시오. 별도의 소스 파일에 각 OS에 대해 개별적으로 구현 된 함수를 작성하십시오.
  • 데이터 유형이 매우 엄격해야합니다 (구조체/클래스는 길지 만 int는 사용하지 마십시오).
  • 즉 모든 경고를 가장 높은 경고 수준에 전환하고 해결.
1
당신은 플랫폼에 따라 사용할 수 있습니다-IFDEF 포함 가능한 프라 그마와 같은 엄격한 유형. 입심은 거의 모든 플랫폼에 사용할 수 정의 멋진 사람이있다

또는 아키텍처.

쉘 스크립트 전용 옵션은 Windows 에서처럼 실행 가능한 대안이 아닙니다. 기본적으로 Bourne 셸, Bash 또는 KSH가 없으며, 불행하게도 PowerShell은 XP 컴퓨터에서는보기 드뭅니다. 그러나 기존 배치 파일과 Bourne 쉘 스크립트를 모두 만들 수 있습니다.

하지만 다른 사람들처럼 플랫폼에 독립적 인 고급 언어를 사용하면 더 쉽습니다. 왜 안 그래? :)

+0

불행히도, 대화 형 유닉스는 오래된 시스템이고 존재하는 유일한 쉘은/bin/sh입니다. – magol

+0

어, 그럴 것 같아요. :) Bash에서 자라났다면, 원래의 Bourne shell을주의 깊게 살펴보십시오. 정말 기본적인 기능 만 있습니다. –

0

파이썬, 루비, 펄, 자바 등 본질적으로 이식성이있는 것을 추가하는 옵션이 없다면 가장 좋은 옵션은 아마 ANSI C를 사용하는 것입니다. C의 초기 인기에 대한 한 가지 이유는 좋은) 이식성. 즉, 그래픽, 네트워킹 등과 같이 OS에 밀접하게 연결된 것은 파이썬 같은 것보다 C에서 이식성이 떨어집니다. OS 특정 기능을위한 "래퍼 (wrapper)"를 만들고 주 코드에서 파티션 된 것들을 분리하도록 노력해야합니다. 이 방법으로 포팅 할 때가되면 래퍼를 다시 쓰고 다른 모든 것들은 컴파일없이 컴파일해야합니다.

모든 것이 파이썬에서 무언가를 작성하고 모든 곳에서 작동하도록하는 것이 훨씬 쉽습니다. 게다가 쓰기가 더 재미 있습니다. 그러므로 미래에 "대화 형 유닉스"를 피할 수 있다면 그렇게하십시오.

1

저는 ANSI-C와 Lua (임베디드 가능한 소형 스크립트 인터프리터)를 사용하도록 권장합니다. 이것을 필요한 기본 C 함수와 함께 사용하십시오.

자주 이식하고 테스트해야합니다. 유닉스에서 1 년을 일한 후 전환을 시도하면 훨씬 더 어려워진다. 왜냐하면 종종 최고의 포팅 솔루션이 모든 플랫폼에서 구현되는 다른 디자인이기 때문이다.

1

Windows에서 sh 스크립트를 직접 실행할 수 없으므로 cygwin을 사용해야합니다. 따라서 바닐라 윈도우에서 정말로 실행하고 싶다면 C89를 C89에 더 잘 사용하고 조심하십시오. 시스템 호출을 사용하는 경우 POSIX 명령을 사용하면 Windows에서 해당 함수를 찾을 수 있습니다. Windows는 또한 포괄적 인 버클리 소켓 유사 라이브러리를 가지고 있기 때문에이를 이유 내에서 사용할 수도 있습니다.

아직 #ifdefing을해야합니다.

Windows 작업으로 만들면 MinGW로 컴파일이 끝나게됩니다. UNIX 서재에서 너무 멀리 벗어나면 대신 Cygwin 바이너리로 만들어야합니다.이 바이너리에는 관련 수하물이 있습니다 .

관련 문제