版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32768743/article/details/87167383
wait(null)
这么写是不行的
点进去
看到要传一个CValue的类型
public fun wait(__stat_loc: kotlinx.cinterop.CValue<platform.posix.__WAIT_STATUS>): platform.posix.__pid_t /* = kotlin.Int */ { /* compiled code */ }
还有一个类叫wait
public final class wait public constructor(rawPtr: kotlinx.cinterop.NativePtr /* = kotlin.native.internal.NativePtr */) : kotlinx.cinterop.CStructVar {
public companion object : kotlinx.cinterop.CStructVar.Type {
}
public final val __wait_stopped: platform.posix.anonymousStruct21 /* compiled code */
public final val __wait_terminated: platform.posix.anonymousStruct20 /* compiled code */
public final var w_status: kotlin.Int /* compiled code */
}
我在 csapp ch10.3练习题 遇到的问题
代码中wait是这样写的
wait(NativePtr.NULL)
调到了类的构造函数
一个可以调用的写法是
wait(cValue())
有没有副作用目前还不清楚,因为wait还牵涉到一个类
public final class __WAIT_STATUS public constructor(rawPtr: kotlinx.cinterop.NativePtr /* = kotlin.native.internal.NativePtr */) : kotlinx.cinterop.CStructVar {
public companion object : kotlinx.cinterop.CStructVar.Type {
}
public final var __iptr: kotlinx.cinterop.CPointer<kotlinx.cinterop.IntVar /* = kotlinx.cinterop.IntVarOf<kotlin.Int> */>? /* compiled code */
public final var __uptr: kotlinx.cinterop.CPointer<platform.posix.wait>? /* compiled code */
}
而且c函数是
最后输出正确结果的代码
package csapp
import kotlinx.cinterop.*
import platform.posix.*
import kotlin.native.internal.NativePtr
fun main() {
val fd = open("foobar.txt", O_RDONLY, 0)
val buffer = ByteArray(1024)
if (fork() == 0) {
buffer.usePinned { pinned ->
read(fd, pinned.addressOf(0), 1)
exit(0)
}
}
wait(cValue())
buffer.usePinned { pinned ->
read(fd, pinned.addressOf(0), 1)
println("c = ${buffer[0].toChar()}")
}
exit(0)
}