Главная страница


ru.unix

 
 - RU.UNIX ----------------------------------------------------------------------
 From : Alexander Titaev                     2:5070/66      07 Jul 2005  18:44:58
 To : All
 Subject : off_t
 -------------------------------------------------------------------------------- 
 
   собственно проблема в том, что не могу корректно пережевать proftpd.scoreboard
 перлом.
   описание внутренней структуры следующее
 
 typedef struct {
   unsigned long sch_magic;
   unsigned long sch_version;
   pid_t sch_pid;
   time_t sch_uptime;   
 } pr_scoreboard_header_t;
    
 /* Structure used for writing scoreboard file entries.
  */
 
 typedef struct {
   pid_t sce_pid;
   uid_t sce_uid;
   gid_t sce_gid;
   char sce_user[32];
   int sce_server_port;
   char sce_server_addr[80], sce_server_label[32];
 #ifdef USE_IPV6
   char sce_client_addr[INET6_ADDRSTRLEN];
 #else
   char sce_client_addr[INET_ADDRSTRLEN];
 #endif /* USE_IPV6 */
   char sce_client_name[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
   char sce_class[32];
   char sce_cwd[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
   char sce_cmd[5];
   char sce_cmd_arg[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
   time_t sce_begin_idle, sce_begin_session;
   off_t sce_xfer_size, sce_xfer_done, sce_xfer_len;
   unsigned long sce_xfer_elapsed;
 } pr_scoreboard_entry_t;
 
 где PR_TUNABLE_SCOREBOARD_BUFFER_SIZE 80, а INET_ADDRSTRLEN 16
 
 пишу
 my $template = "L L i L I I I A32 i A80 A32 A16 A80 A32 A80 A5 A80 L L I I I L";
 my $recordsize = length(pack($template,(  )));
 my $score_file='/usr/local/var/proftpd/proftpd.scoreboard';
 
 open(SCORE,$score_file) or die "Unable to open $score_file:$!\n";
 
 while (read(SCORE,$record,$recordsize)) {
         my ($sch_magic, $sch_version, $sch_pid, $sch_uptime, $sce_pid, $sce_uid,
 $sce_gid,
 $sce_user, $sce_server_port, $sce_server_addr, $sce_server_label,
 $sce_client_addr, $sce_cl
 ient_name, $sce_class, $sce_cwd, $sce_cmd, $sce_cmd_arg, $sce_begin_idle,
 $sce_begin_sessio
 n, $sce_xfer_size, $sce_xfer_done, $sce_xfer_len, $sce_xfer_elapsed)=
 unpack($template,$rec
 ord);
     if ($sce_pid != 0){
         print "$sce_user, $sce_client_addr, $sce_client_name, $sce_class,
 $sce_cwd, $sce_cm
 d, $sce_cmd_arg, $sce_begin_idle,$sce_begin_session, $sce_xfer_size,
 $sce_xfer_done, $sce_x
 fer_len, $sce_xfer_elapsed\n";
         print "----------------\n";
     }
 }
 close(SCORE);
 
 первая запись нормально, для все остальных явно сдвиг на байт в право
 aptekar# ./score.pl
 ftp, 195.206.52.6, asbaikaltv.ru, , /, idle, , 1275068416,1245891832, 4377848,
 0, 0, 0
 -+--------------
 tp, 95.206.40.187n, et2.DSI.ru, /, i, dle, , 4166975488,4166861516, 17100, 0, 0,
 0
 -+--------------
 еже ли юзать
 my $template = "L L i L I I I A32 i A80 A32 A16 A80 A32 A80 A5 A79 L L I I I L";
 то все нормально
 aptekar# ./score.pl
 ftp, 195.206.52.6, asbaikaltv.ru, , /, idle, , 0,1120729164, 1120729162, 0, 0, 0
 -+--------------
 ftp, 195.206.40.187, net2.DSI.ru, , /, idle, , 0,1120729183, 1120729181, 0, 0, 0
 -+--------------
 
 но согласно описанию должно быть A80
 где ошибаюсь не пойму
 
 -- 
 Sanyo     mailto:tit@irk.ru
 
 --- tin/1.4.6-20020816 ("Aerials") (UNIX) (FreeBSD/4.11-RELEASE-p10 (i386))
  * Origin: The_Bulls echo gate (2:5070/66)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 off_t   Alexander Titaev   07 Jul 2005 18:44:58 
Архивное /ru.unix/372402870250d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional