0

私はシステムコール関数を書いています(FreeBSDで)。ご存じのとおり、このような関数の戻り値の型は int であり、syscall が成功したかどうかのみを示し、呼び出し元が要求した値は設定によって返されます。

td->td_retval[0]= my_requires_value;

ここで、td は thread* 型で、td_retval[0] は int です。

私の問題は、必要な値が char [] であることです。どうすればこれを管理できますか? システムコールでここのように td->td_retval[0] を設定する必要があり、呼び出し元関数でそれを取得するにはどうすればよいですか?

私は C とそのポインターにあまり詳しくありませんが、適切なポインターとアドレスを使用することでこれを達成できると思います。

4

1 に答える 1

2

文字列を返したい場合は、関数に、文字列を受け取るユーザースペースに事前に割り当てられたバッファーへのポインターである引数(および最大サイズの別の引数)が必要です。戻り値は、提供されたバッファが小さすぎるなどのエラーを報告するためにのみ使用されます。

この例を参照してください。syscallの設計に役立つ場合があります。

于 2013-03-17T15:46:39.283 に答える