2011-06-30 20 views
0

旧式のCarbon関数であるFSWrite、FSReadなどを含む古いコードを変換しようとしています。私たちが試してみたい1つの実験は、これをPOSIXに置き換えることです。関数stdio.hで定義されています。 FSRead()をfread()に置き換えます。しかし、私はCarbon関数に与えられた最初の引数について何をすべきかわからない:Carbonファイル関数をstdio.h関数に置き換える

SetFPos(gFormatRecord->dataFork, fsFromStart, 0); 

gFormatRecordはFormatRecordへのポインタです。 dataForkは、fread()、fprintf()などに押し込むのに適した普通のユニックスなファイルハンドルですか? (私はどのような場合には、ファイル「フォーク」についてはあまり知りません。)

は(これは私の以前の質問へのフォローアップで、On a Mac, where are FSRead, FSWrite, SetFPos et al defined, and should I even be using them?)をgFormatRecord->dataForkから

+0

Btw、この努力が愚かなら、それは大丈夫です。私たちは、この全部がとにかくより深い書き直しを必要とすると考えています。 – DarenW

答えて

2

、あなたがしようとしているように聞こえますPhotoshopプラグインを作成します。それはうまくいくわけではありません。

Photoshopの(そしておそらくほとんどのMacアドビのソフトウェアは)(私はしないでくださいまた、OS XとのAPI/ABIの互換性でありながら、8.5のAPIを、既存の大部分が同じになるように設計されたカーボンコードの多くがいっぱいですCFM Carbonサポートが落とされたかどうかを知る)。

ドキュメントによれば、FSSetForkPosition()を代わりに使用することになっています。これは、おそらく最後に同じ関数呼び出しになることになります。 fseek()/fsetpos()/fseeko()FILE *が必要です)、カーボンファイルハンドルは私のヘッダーによるとSInt16(webdocsはFSIORefNumだと言われています)と思われます。 [1]

また、fopen()と友人はPOSIXではありません。それらは標準Cです。POSIX関数は、シークを除いて、先頭にfがなければ、一般的に同じです。lseek()です。 [2] POSIXの "ファイルハンドル"はファイルディスクリプタで、ちょうどintです。あなたは信じられないほど幸運なら

さて、FSIORefNumはちょうどあなたがread()/write()/lseek()に渡すことができるファイルディスクリプタになります。しかし、これは究極的にはほとんど役に立たない。 PhotoshopがまだCarbon上に構築されている場合、何がポイントですか?


脚注!

  1. それはゼロページへのfseek()特殊な場合のポインターことは不可能ではないのですが、私は、彼らはそれとlibcの汚さないと思います。)
  2. のLinux/x86では、あなたがする必要があります#define __FILE_OFFSET_BITS 64程度であるので、忘れやすい大きなファイルのサポートが得られます。恥ずかしくて普遍的にするのは簡単ではありません...
+0

open()、read()などと同様にfopen()、fread()などについて言いますか? – DarenW

+0

もちろんです。一方のセットは 'FILE * 'をとり、他方は' int'をとります。彼らがCarbonコールと互換性があるかどうかは誰でも推測できます(CarbonがOS X上でどのように実装されているかによって異なります)。しかし、私は実際にプロダクションコードに依存しません。 –

関連する問題