2011-02-23 36 views
11

Tôi muốn viết chương trình C để hiển thị thời gian sửa đổi tập tin cuối cùng trong micro giây hoặc mili giây. Làm thế nào tôi có thể làm gì? Bạn có thể giúp tôi không?Cách hiển thị thời gian sửa đổi tập tin cuối cùng trên linux

Cảm ơn rất nhiều.

+1

Chỉ cần ra khỏi tò mò, Tại sao bạn cần điều này? – Alphaneo

+0

@Alphaneo: Trên thực tế, tôi muốn hiển thị tất cả các lần sửa đổi cuối cùng của các tệp trong một số thư mục. Theo đó, tôi có thể sắp xếp các tập tin của mình. thx – JavaMobile

Trả lời

11

Chức năng stat() được sử dụng. Trong các phiên bản đầy đủ gần đây của glibc, st_mtim (lưu ý: không trailing e) là một lĩnh vực loại struct timespec chứa thời gian chỉnh sửa file:

struct stat st; 

if (stat(filename, &st)) { 
    perror(filename); 
} else { 
    printf("%s: mtime = %lld.%.9ld\n", filename, (long long)st.st_mtim.tv_sec, st.st_mtim.tv_nsec); 
} 

Bạn nên kiểm tra xem có sự hiện diện của st_mtim trong struct stat trong hệ thống xây dựng của bạn, và sẵn sàng quay trở lại st_mtime (có loại time_t và chỉ có độ phân giải 1 giây) nếu không có mặt.

+0

Cảm ơn rất nhiều. Thật tuyệt vời. Nhưng đầu ra là rối loạn, có thể sắp xếp chúng theo tên tập tin không? – JavaMobile

+0

@JavaMobile: Chắc chắn - đặt con trỏ vào tên tệp vào một mảng và sắp xếp chúng, sau đó chạy qua mảng đó và gọi 'stat()'. – caf

4

Bạn có thể sử dụng hàm stat(), nó sẽ trả về cấu trúc chỉ số có chứa thời gian sửa đổi cuối cùng của tệp. Đây là trang người đàn ông http://linux.die.net/man/2/stat. Về độ chính xác, nó phụ thuộc vào việc hệ thống tệp của bạn có hỗ trợ dấu thời gian phụ thứ hai hay không.

+0

Có thể lấy thời gian trong phạm vi Mili hoặc Mili giây hay không bằng cách sử dụng stat ... Tôi không sợ;) – Alphaneo

+2

@Alphaneo: Tôi đã xem trang Web đó và nó nói rằng 'stat' trả về thời gian với độ chính xác nano giây. –

+0

Có, stat() trên Linux có các trường bổ sung để thêm độ phân giải nano giây, kể từ hạt nhân 2.5.48. Tuy nhiên, như @ ZelluX chỉ ra, chính xác! = Độ chính xác - nó thực sự phụ thuộc vào những gì hệ thống tập tin hỗ trợ. – payne

0

Để hoàn thành câu trả lời bằng AndrewZelluX.
Giới hạn nằm trong hệ thống tệp. Đối với Linux ext3 thường được sử dụng, và bạn có thể thấy trong wikipedia:

Date resolution 1s 
1

JFS, XFS, ext4 và Btrfs hỗ trợ dấu thời gian nano giây.

Cuốn sách "The Linux Programming Interface" của Michael Kerrisk có một phần tốt về tập tin thuộc tính

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