Đây là mã JNI C của tôi:
JNIEXPORT jint JNICALL Java_org_avuna_httpd_util_CLibJNI_bind(JNIEnv * this, jclass cls, jint sockfd, jint family, jstring path, jint len) {
struct sockaddr_un sun;
sun.sun_family = gia đình;
const char *npath = (*this)->GetStringUTFChars(this, path, 0);
sun.sun_path = npath;
return bind(sockfd, sun, sizeof(&npath));
}
Tôi chỉ đoán không thành công (sizeof(&npath)
) Làm thế nào để có được độ dài. Tôi không thành thạo C lắm, nhưng tôi nghĩ có một cách để lấy độ dài từ một chuỗi.
Google không mang lại kết quả nào, tôi có thiếu điều gì cơ bản không?
Vì loại biến là const char*
Điều này chỉ ra rằng đó là một không có gì
chuỗi ở cuối, vì vậy
size_t chiều dài = strlen(npath);
Thế là đủ rồi.
Mặc dù bạn là ràng buộc()
Cuộc gọi sai, nhưng bạn nên chuyển địa chỉ có kích thước của cấu trúc, vì điều này
return bind(sockfd, sun, sizeof(sun));
nên đúng.
Tôi là một lập trình viên xuất sắc, rất giỏi!