2012-02-14 51 views
13

Có chức năng (hoặc giao diện; ioctl, netlink, v.v.) trong libs chuẩn của Linux sẽ trả về giá trị hiện tại trực tiếp từ hạt nhân mà không cần phân tích cú pháp/proc không? strace nhập lệnh gắn kết, có vẻ như nó phân tích tệp trong/procChức năng Linux để có được điểm gắn kết

+0

http://stackoverflow.com/questions/5095976/mount-system-call – Satish

+1

@Satish mà gắn kết một filesystem- nó không trả lại _current mounts_ – tMC

+4

Tại sao bạn muốn tránh '/ proc /'? ? dưới Linux, nó là cách ưa thích để lấy thông tin đó! Và nó cũng rất đơn giản !! –

Trả lời

2

Không có syscall nào liệt kê thông tin này; thay vào đó, bạn có thể tìm thấy nó trong tệp /etc/mtab

+0

mtab chỉ là một liên kết tượng trưng đến/proc/gắn kết trên hầu hết các hệ thống. – tMC

+0

liên kết mềm hoặc liên kết cứng? Tôi nhớ rằng trong những ngày cũ mtab không đáng tin cậy ... –

+0

@tMC: '/ proc/mounts' là một chi tiết thực hiện. '/ etc/mtab' là một tập tin chuẩn mà bạn sẽ tìm thấy trên hầu hết các hệ thống giống Unix. Tôi không kiểm tra nhưng tôi nghĩ đó là một phần của tiêu chuẩn. Vì vậy, bạn có thể dựa vào nó. Và tôi sẽ không nói "trên hầu hết hệ thống". Trong các hệ thống Ubuntu và OpenSuSE của tôi, đó là một tệp đơn giản. Tôi có '/ proc/mounts' nhưng đó là một liên kết :-) –

32

Có lý do nào khiến bạn không sử dụng cuộc gọi thư viện libc getmntent không? Tôi nhận ra rằng nó không giống như một cuộc gọi hệ thống 'tất cả trong một', nhưng nó sẽ cho phép bạn nhận được thông tin liên quan.

#include <stdio.h> 
#include <stdlib.h> 
#include <mntent.h> 

int main(void) 
{ 
    struct mntent *ent; 
    FILE *aFile; 

    aFile = setmntent("/proc/mounts", "r"); 
    if (aFile == NULL) { 
    perror("setmntent"); 
    exit(1); 
    } 
    while (NULL != (ent = getmntent(aFile))) { 
    printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir); 
    } 
    endmntent(aFile); 
} 
+0

Tôi có một hệ thống nhúng có thể sử dụng thông tin này trong khi khởi động; trước/proc được gắn kết. – tMC

+1

Cả hai 'df' và' mount' đều sử dụng '/ proc/self/mountinfo' thay vì'/proc/mounts', nhưng kết quả là giống nhau. –

+1

Hãy nhớ rằng 'getmntent' không phải là chủ đề an toàn. Có 'getmntent_r' (phần mở rộng GNU). –

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