/[LeafOK_CVS]/lbbs/src/test_file_loader.c
ViewVC logotype

Diff of /lbbs/src/test_file_loader.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 by sysadm, Fri May 16 12:22:35 2025 UTC Revision 1.13 by sysadm, Tue Nov 11 00:28:05 2025 UTC
# Line 1  Line 1 
1  /***************************************************************************  /* SPDX-License-Identifier: GPL-3.0-or-later */
2                                                  file_loader.c  -  description  /*
3                                                           -------------------   * test_file_loader
4          Copyright            : (C) 2004-2025 by Leaflet   *   - tester for shared memory based file loader
5          Email                : leaflet@leafok.com   *
6   ***************************************************************************/   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>
7     */
8  /***************************************************************************  
9   *                                                                         *  #ifdef HAVE_CONFIG_H
10   *   This program is free software; you can redistribute it and/or modify  *  #include "config.h"
11   *   it under the terms of the GNU General Public License as published by  *  #endif
  *   the Free Software Foundation; either version 3 of the License, or     *  
  *   (at your option) any later version.                                   *  
  *                                                                         *  
  ***************************************************************************/  
12    
13  #include "file_loader.h"  #include "file_loader.h"
14  #include "log.h"  #include "log.h"
15    #include "trie_dict.h"
16    #include <errno.h>
17  #include <stdio.h>  #include <stdio.h>
18  #include <unistd.h>  #include <unistd.h>
19    #include <sys/shm.h>
20    
21    static const char TRIE_DICT_SHM_FILE[] = "~trie_dict_shm.dat";
22    
23  const char *files[] = {  const char *files[] = {
24          "../data/welcome.txt",          "../data/welcome.txt",
25          "../data/copyright.txt",          "../data/copyright.txt",
26          "../data/register.txt",          "../data/register.txt",
27          "../data/license.txt",          "../data/license.txt",
28          "../data/login_error.txt"};          "../data/login_error.txt",
29            "../data/read_help.txt"};
30    
31  int files_cnt = 5;  int files_cnt = 6;
32    
33  int main(int argc, char *argv[])  int main(int argc, char *argv[])
34  {  {
35          int ret;          int ret;
         int file_loader_pool_size = 2;  
36          int i;          int i;
37          const FILE_MMAP *p_file_mmap;          const void *p_shm;
38            size_t data_len;
39            long line_total;
40            const void *p_data;
41            const long *p_line_offsets;
42            FILE *fp;
43    
44          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)          if (log_begin("../log/bbsd.log", "../log/error.log") < 0)
45          {          {
# Line 41  int main(int argc, char *argv[]) Line 47  int main(int argc, char *argv[])
47                  return -1;                  return -1;
48          }          }
49    
50          log_std_redirect(STDOUT_FILENO);          log_common_redir(STDOUT_FILENO);
51          log_err_redirect(STDERR_FILENO);          log_error_redir(STDERR_FILENO);
52    
53            if ((fp = fopen(TRIE_DICT_SHM_FILE, "w")) == NULL)
54            {
55                    log_error("fopen(%s) error\n", TRIE_DICT_SHM_FILE);
56                    return -1;
57            }
58            fclose(fp);
59    
60            if (trie_dict_init(TRIE_DICT_SHM_FILE, TRIE_NODE_PER_POOL) < 0)
61            {
62                    printf("trie_dict_init failed\n");
63                    return -1;
64            }
65    
66          ret = file_loader_init(file_loader_pool_size);          ret = file_loader_init();
67          if (ret < 0)          if (ret < 0)
68          {          {
69                  printf("file_loader_init() error (%d)\n", ret);                  printf("file_loader_init() error (%d)\n", ret);
70                  return ret;                  return ret;
71          }          }
72    
73          ret = file_loader_init(file_loader_pool_size);          ret = file_loader_init();
74          if (ret == 0)          if (ret == 0)
75          {          {
76                  printf("Rerun file_loader_init() error\n");                  printf("Rerun file_loader_init() error\n");
# Line 59  int main(int argc, char *argv[]) Line 78  int main(int argc, char *argv[])
78    
79          printf("Testing #1\n");          printf("Testing #1\n");
80    
81          for (i = 0; i < file_loader_pool_size; i++)          for (i = 0; i < files_cnt; i++)
82          {          {
83                  if (load_file_mmap(files[i]) < 0)                  if (load_file(files[i]) < 0)
84                  {                  {
85                          printf("Load file %s error\n", files[i]);                          printf("Load file %s error\n", files[i]);
86                  }                  }
87          }          }
88    
89          for (i = 0; i < file_loader_pool_size; i++)          for (i = 0; i < files_cnt; i++)
90          {          {
91                  if ((p_file_mmap = get_file_mmap(files[i])) == NULL)                  if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
92                  {                  {
93                          printf("Get file mmap %s error\n", files[i]);                          printf("Get file shm %s error\n", files[i]);
94                  }                  }
95                  else                  else
96                  {                  {
97                          printf("File: %s size: ", files[i]);                          printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
                         printf("size: %ld lines: %ld\n", p_file_mmap->size, p_file_mmap->line_total);  
                 }  
         }  
98    
99          for (i = 0; i < file_loader_pool_size; i++)                          for (int j = 0; j < line_total; j++)
100          {                          {
101                  if (unload_file_mmap(files[i]) < 0)                                  printf("Line %d: %ld ~ %ld\n", j, p_line_offsets[j], p_line_offsets[j + 1]);
102                  {                          }
103                          printf("Unload file %s error\n", files[i]);  
104                            if (detach_file_shm(p_shm) < 0)
105                            {
106                                    log_error("detach_file_shm(%s) error\n", files[i]);
107                            }
108                  }                  }
109          }          }
110    
# Line 92  int main(int argc, char *argv[]) Line 112  int main(int argc, char *argv[])
112    
113          for (i = 0; i < files_cnt; i++)          for (i = 0; i < files_cnt; i++)
114          {          {
115                  if (i >= file_loader_pool_size)                  if (unload_file(files[i]) < 0)
116                  {                  {
117                          if (unload_file_mmap(files[i - file_loader_pool_size]) < 0)                          printf("Unload file %s error\n", files[i]);
                         {  
                                 printf("Unload file %s error\n", files[i]);  
                         }  
118                  }                  }
119            }
120    
121                  if (load_file_mmap(files[i]) < 0)          for (i = 0; i < files_cnt; i++)
122            {
123                    if (load_file(files[i]) < 0)
124                  {                  {
125                          printf("Load file %s error\n", files[i]);                          printf("Load file %s error\n", files[i]);
126                  }                  }
# Line 110  int main(int argc, char *argv[]) Line 130  int main(int argc, char *argv[])
130    
131          for (i = 0; i < files_cnt; i++)          for (i = 0; i < files_cnt; i++)
132          {          {
133                  if ((p_file_mmap = get_file_mmap(files[i])) == NULL)                  if (i % 2 == 0)
134                  {                  {
135                          printf("Get file mmap %s error\n", files[i]);                          if (unload_file(files[i]) < 0)
136                            {
137                                    printf("Unload file %s error\n", files[i]);
138                            }
139                  }                  }
140                  else          }
141    
142            for (i = 0; i < files_cnt; i++)
143            {
144                    if (i % 2 != 0)
145                  {                  {
146                          printf("File: %s size: ", files[i]);                          if ((p_shm = get_file_shm_readonly(files[i], &data_len, &line_total, &p_data, &p_line_offsets)) == NULL)
147                          printf("size: %ld lines: %ld\n", p_file_mmap->size, p_file_mmap->line_total);                          {
148                                    printf("Get file shm %s error\n", files[i]);
149                            }
150                            else
151                            {
152                                    printf("File: %s size: %ld lines: %ld\n", files[i], data_len, line_total);
153    
154                                    if (detach_file_shm(p_shm) < 0)
155                                    {
156                                            log_error("detach_file_shm(%s) error\n", files[i]);
157                                    }
158                            }
159                  }                  }
160          }          }
161    
162          file_loader_cleanup();          file_loader_cleanup();
163          file_loader_cleanup();          file_loader_cleanup();
164    
165            trie_dict_cleanup();
166    
167            if (unlink(TRIE_DICT_SHM_FILE) < 0)
168            {
169                    log_error("unlink(%s) error\n", TRIE_DICT_SHM_FILE);
170                    return -1;
171            }
172    
173          log_end();          log_end();
174    
175          return 0;          return 0;


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1