2012-04-20 32 views
6

Tôi có thư viện tiêu thụ FILE * và xuất dữ liệu sang một số khác FILE *.Tôi có thể tạo FILE được ánh xạ bộ nhớ * trong C/Objective-C trên iOS không?

Tôi muốn xử lý cả đầu vào cho thư viện này và đầu ra từ thư viện này trong bộ nhớ mà không cần đọc/ghi vào/từ tệp trên đĩa.

Chúng tôi đang thực hiện việc này trong iOS - do đó, chạy thư viện dưới dạng ứng dụng riêng biệt và sử dụng stdin/stdout không phải là (theo như tôi biết) một tùy chọn khả thi.

+0

có [fmemopen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html) và [open_memstream] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/open_memstream .html), nhưng tôi không biết liệu chúng có sẵn trên iOS – Christoph

+0

Không, chúng không khả dụng trên iOS hoặc OS X. –

Trả lời

4

Vì ObjC là một superset của C, tất cả các bạn phải làm là #import/#include <stdio.h> để đạt được quyền truy cập vào các funopen() mà bản thân nó chứa các chức năng readfn, writefn, seekfnclosefn. Và fwopen có một ví dụ cho thấy làm thế nào để ghi vào hai dòng tại SO question khác.

Mac OSX và iOS không bao gồm fmemopenopen_memstream vì chúng rõ ràng là unportable linux functions.

+0

@KurtRevis, tôi đã thay đổi câu trả lời của mình cho phù hợp. – CodaFi

+0

OK, chính xác thì bạn sử dụng fopen() để lấy một tập tin * từ một khối bộ nhớ chứ không phải một tập tin? –

+0

@KurtRevis fwopen và funopen sẽ hoạt động tốt cho việc viết, đặc biệt là hai tệp được hiển thị [ở đây] (http://stackoverflow.com/a/1043871/945847) – CodaFi

2

Hãy xem https://github.com/shyuep/pyhull/tree/master/src/fmemopen, tôi đã tự mình thử nghiệm trên Mac OSX 10.8.2 và nó hoạt động tốt.

Tác giả nói rằng nó cũng sẽ hoạt động trên iOS.

+0

Tôi đã cố gắng biên dịch các thư viện trên trên mac của tôi và tôi nhận được một lỗi 'lỗi: không có chức năng phù hợp cho cuộc gọi đến 'funopen'' là có bất kỳ cờ đặc biệt cần thiết? – pyCthon

+0

Tôi đang ở trên 'Apple LLVM phiên bản 5.0 (clang-500.2.79) (dựa trên LLVM 3.3svn)' nếu điều đó giúp – pyCthon

Các vấn đề liên quan