Если Вы будете искать в заголовочных файлах в Вашей системе, то Вы найдете, в каком заголовочном файле функция объявляется в Вашей системе. Это может быть трудно как иногда, функция объявляется через сложный макрос. И это только скажет Вам, какой заголовочный файл объявляет функцию в Вашей системе; это может даже быть заголовочным файлом, который Вы не можете включать непосредственно, потому что ему нужны другие заголовки, чтобы быть на первом месте.
Единственный безопасный способ найти, что заголовочный файл включать состоит в том, чтобы консультироваться с документацией библиотеки, которая обеспечивает функцию. Для стандартной библиотеки можно консультироваться:
man 3 function_name
или man 2 function_name
— различие между 2 и 3 является в основном историческим), или другая документация (например, GNU libc руководство по Linux).Я работаю с procmail
и Dovecot
, но maildir структура справедливо стандартизирована.
При попытке заархивировать по дате, можно хотеть проверить Date
от заголовков. При чтении из верхней части заголовков первого свидания Вы находка должна быть очень точной. Мои сообщения имеют три поля, которые могут использоваться Delivery-Date:
, Received:
заголовки, и Date:
заголовок. Для полученных сообщений, Delivery-Date:
или сначала Received:
заголовок будет иметь соответствующую дату. Для отправленных сообщений Вы, вероятно, будете иметь только Date:
заголовок, который может отразить время системы, которая создала его, не Ваш почтовый сервер. Можно хотеть отметить сообщения, которые не имеют применимой даты в заголовках.
ctime
должна обычно быть дата сообщения, но существуют случаи, где новая копия сообщения создается, когда это перемещено или скопировано. Обычно эти действия происходят путем пересоединения файла с корректным каталогом.Править: Этот сценарий распечатает список сообщений с первым свиданием в файле. Это соответствует на формате даты RFC. regex не может быть лучшим.
#!/usr/bin/perl
%months = ( 'Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04',
'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08',
'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12' );
foreach $filename (@ARGV) {
open( MESSAGE, $filename);
while (<MESSAGE>) {
if ( m/[A-Z][a-z][a-z], ([1230][0-9]) ([A-Z][a-z][a-z]) ([12][0-9][0-9][0-9])/ ) {
print "$3-$months{$2}-$1 $filename\n";
last
}
if ( m/^$/ ) { # End of header
print "-No--Date- $filename\n";
last
}
}
close MESSAGE;
}
# EOF
Когда я читал отсюда, различие между ctime и mtime объяснено здесь http://cerebro.freeshell.org/log/unix-mtime-vs-ctime/. Я могу сказать Вам небольшую идею, просто присоединить метку времени к каждой почте, которую Вы храните так, чтобы, когда Вы получаете назад, у Вас была точная дата, которую она была отправлена или получена, это мы используем, чтобы сделать для наших резервных копий.