2012-05-08 26 views
11

Tôi mới trong thế giới Mac OS X nhưng tôi có các kỹ năng trên Windows dev.Mac OS X daemon bằng Objective-C - launchd

Tôi cần phát triển một daemon (trên Windows sẽ là Dịch vụ Windows) tải lên/tải xuống tệp từ Dịch vụ web.

Câu hỏi của tôi là: là có thể tạo ứng dụng được viết trong Objective-C sẽ là daemon (để tải lên/tải xuống) và khởi động khi hệ điều hành bắt đầu sử dụng launchd? Hoặc có một cách khác để tạo một daemon?

Cảm ơn bạn

Trả lời

2

Tôi không biết mình đã hiểu đúng chưa nhưng tôi đoán bạn có thể làm được. Liên kết tiếp theo có thể là một khởi đầu tốt để hiểu cách Daemons hoạt động trong Objective-C Apple Developer Sau đó, ở đây có một đoạn mã thú vị. It is about GPS but it might be usefull. Cũng có được một cái nhìn của thư mục github này. It is a controller for start/stop daemons

+0

Cảm ơn bạn, đó là điều tôi đang tìm kiếm. – avmauricio

4

Trên OS X các dịch vụ này được gọi là LaunchDaemon (system-wide) và LaunchAgent (người dùng cụ thể). Bạn tạo một cấu hình cho hệ thống biết khi nào bắt đầu, cái nào có thể chạy được, phải làm gì với stdin, stdout và stderr, các đối số nào để truyền, v.v. Có một cái nhìn tại các trang người đàn ông:

launchd(8)  # the service controlling other services 
launchctl(1)  # the command to control services 
launchd.plist(5) # the configuration format for services 

Các daemon có thể được viết bằng bất kỳ ngôn ngữ chạy trên OS X. Vì vậy, Objective-C là một sự lựa chọn tiêu biểu cho nền tảng Mac, nhưng bất cứ điều gì khác từ Ruby, Python, và Perl trên AppleScript để đồng bằng C hoặc C++ sẽ làm.

Và không, không có cách nào khác (được khuyến nghị) để thực hiện việc này trên Mac. init.d tập lệnh kiểu không hoạt động trên máy Mac [hoặc trên Darwin, đó là lớp UNIX]. Hoặc, chính xác hơn, không có cơ sở hạ tầng nào chạy chúng.

Để biết thêm thông tin, hãy xem Daemons and Services Programming Guide.

+0

Nhấn mạnh: *** có thể được viết bằng bất kỳ ngôn ngữ nào. Không nên sử dụng Obj-C cho LaunchDaemon hoặc LaunchAgent cấp hệ thống vì các lỗ hổng InputManager! – Richard