2012-07-07 34 views
8

Tôi muốn để có được những ngày sửa đổi cuối cùng của một tập tin trong C. Hầu như tất cả các nguồn tôi thấy sử dụng cái gì đó dọc đoạn này:Lấy ngày sửa đổi cuối cùng của một tập tin trong C

char *get_last_modified(char *file) { 
    struct tm *clock; 
    struct stat attr; 

    stat(file, &attr); 
    clock = gmtime(&(attr.st_mtime)); 

    return asctime(clock); 
} 

Nhưng attr doesn' thậm chí có trường st_mtime, chỉ st_mtimespec. Tuy nhiên, khi sử dụng Eclipse của tôi cho tôi biết rằng passing argument 1 of 'gmtime' from incompatible pointer type trên dòng clock = gmtime(&(attr.st_mtimespec));

Tôi đang làm gì sai?

PS: Tôi đang phát triển trên OSX Snow Leopard, Eclipse CDT và sử dụng GCC như trình biên dịch Cross-Platform

+0

Có, nếu không, 'stat' sẽ không khả dụng. –

+1

Mặc dù OT: Bạn không muốn lưu trữ tham chiếu được trả về bởi 'get_last_modified()' đúng không? 'asctime()' trả về một tham chiếu đến bộ nhớ tĩnh, nội dung của nó sẽ được ghi đè lên mỗi lần gọi liên tiếp đến nó. – alk

+0

Nó chỉ được gọi một lần, nhưng tôi sẽ giữ nó trong tâm trí nên có bao giờ thay đổi :) –

Trả lời

5

Trên OS X, st_mtimespec.tv_sec là tương đương với st_mtime.

Để làm điều này cầm tay, làm

#ifdef __APPLE__ 
#ifndef st_mtime 
#define st_mtime st_mtimespec.tv_sec 
#endif 
#endif 

và sau đó sử dụng st_mtime.

+0

Có cách nào để làm cho compilant chéo này? Chương trình phải chạy trên Ubuntu mà không có bất kỳ cảnh báo và lỗi nào, nhưng tôi không có máy ảo để lập trình ... –

+0

Xem câu trả lời đã chỉnh sửa. – mpartel

+0

Bây giờ nó nói với tôi rằng 'Field' tv_sec 'không thể được giải quyết' –

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