2013-03-27 33 views
6

Vì một số lý do, tôi cần gọi một số cuộc gọi hệ thống của hệ thống (Linux) Tôi đã kiểm tra tài liệu của gói 'syscall' và không thể tìm thấy bất kỳ điều gì về nó .Làm thế nào tôi có thể gọi hệ thống của Linux/UNIX trong golang

Sau đó, tôi chỉ nhìn thấy một dự án (https://github.com/AllenDang/w32/blob/master/kernel32.go) bao bọc cửa sổ apis. Tôi đọc mã nguồn của nó một chút.

Nó sử dụng

modkernel32 = syscall.NewLazyDLL("kernel32.dll") 

để tải thư viện năng động. Tuy nhiên, không có tài liệu nào cho hàm NewLazyDLL()

Tôi chắc chắn có một chức năng tương tự cho Linux/UNIX. Có ai có thể cho biết tôi tên của hàm hoặc cách gọi hàm hệ thống của Linux ở Golang hoặc các hàm tải từ libc.so?

Chi tiết

Tôi muốn gọi hệ thống gọi 'daemon' hoặc 'ngã ba' (Tôi muốn daemonize quá trình này) bởi vì tôi không thể tìm thấy thư viện golang cung cấp cho họ.

+0

Chính xác bạn muốn làm gì? Gói 'syscall' là gói đúng cho giao diện gọi trực tiếp của hệ thống, nhưng thật khó để đưa ra lời khuyên nào mà không biết bạn muốn làm gì. Bạn sẽ không tìm thấy tải DLL trong phiên bản UNIX của gói mặc dù, vì đó không phải là một phần của giao diện gọi hệ thống. –

+0

Cảm ơn James đã trả lời của bạn. Thực ra tôi chỉ muốn biết cách tôi có thể nhận giao diện cuộc gọi hệ thống. –

Trả lời

4

Hiện tại không có chức năng kiểu dáng daemon trong thư viện chuẩn Go. Có an open bug about adding such a feature, nhưng nó đã được hoãn lại cho đến sau phiên bản Go 1.1. Tôi sẽ đề nghị đọc báo cáo lỗi cho một số lý do nó không phải là khá đơn giản như nó có thể lần đầu tiên xuất hiện.

Có nhiều cách khác để chạy các quy trình daemon ngoài việc có bản thân daemon. Các daemon init hiện đại như Upstart và Systemd có thể quản lý các quy trình daemon như vậy cho bạn, ví dụ.

+0

Cảm ơn James. Tôi sẽ không sử dụng fork/daemon trong chương trình của tôi nhưng tôi vẫn tự hỏi rằng làm thế nào tôi có thể gọi hệ thống gọi của unix. Tôi tìm thấy có hai chức năng được gọi là Syscall/Syscall6 nhưng không có bất kỳ tài liệu nào cho nó. Có phải hai hàm này có thể được sử dụng để gọi hệ thống gọi là unix không? –

+0

Các chức năng trong gói 'systemcall' cho phép bạn truy cập vào hầu hết các cuộc gọi hệ thống (như bạn đã phỏng đoán chính xác trong câu hỏi của mình). Ví dụ, 'syscall.Read' sẽ gọi lệnh gọi hệ thống' SYS_read'. Nếu hệ thống cụ thể gọi cho bạn sau khi không được bao gồm trong gói, vui lòng hỏi cụ thể về họ. Câu trả lời ở trên bao gồm câu hỏi cụ thể của bạn về daemonising một quá trình. –

+0

Gói syscall hiển thị (gần như) tất cả các syscalls của nền tảng bạn đang truy cập. Nội dung của gói này là khác nhau giữa các nền tảng khác nhau. Sử dụng tệp nguồn có hậu tố nền tảng, chẳng hạn như foo_linux.go và foo_windows.go. đi xây dựng sẽ chỉ biên dịch các tập tin với hậu tố phù hợp. Đây là một cách tốt đẹp và sạch sẽ để đưa ra mã phụ thuộc vào nền tảng. – fuz

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