Mercurial > hg > nginx
comparison src/os/unix/ngx_files.c @ 561:e48ebafc6939 release-0.3.2
nginx-0.3.2-RELEASE import
*) Feature: the Sun Studio 10 C compiler support.
*) Feature: the "proxy_upstream_max_fails",
"proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", and
"fastcgi_upstream_fail_timeout" directives.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 12 Oct 2005 13:50:36 +0000 |
parents | d4ea69372b94 |
children | 4d9ea73a627a |
comparison
equal
deleted
inserted
replaced
560:8886091eddd2 | 561:e48ebafc6939 |
---|---|
6 | 6 |
7 #include <ngx_config.h> | 7 #include <ngx_config.h> |
8 #include <ngx_core.h> | 8 #include <ngx_core.h> |
9 | 9 |
10 | 10 |
11 ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) | 11 ssize_t |
12 { | 12 ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
13 ssize_t n; | 13 { |
14 ssize_t n; | |
14 | 15 |
15 ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0, | 16 ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0, |
16 "read: %d, %p, %uz, %O", file->fd, buf, size, offset); | 17 "read: %d, %p, %uz, %O", file->fd, buf, size, offset); |
17 | 18 |
18 #if (NGX_HAVE_PREAD) | 19 #if (NGX_HAVE_PREAD) |
51 | 52 |
52 return n; | 53 return n; |
53 } | 54 } |
54 | 55 |
55 | 56 |
56 ssize_t ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) | 57 ssize_t |
57 { | 58 ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset) |
58 ssize_t n; | 59 { |
60 ssize_t n; | |
59 | 61 |
60 ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0, | 62 ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0, |
61 "write: %d, %p, %uz, %O", file->fd, buf, size, offset); | 63 "write: %d, %p, %uz, %O", file->fd, buf, size, offset); |
62 | 64 |
63 #if (NGX_HAVE_PWRITE) | 65 #if (NGX_HAVE_PWRITE) |
107 | 109 |
108 return n; | 110 return n; |
109 } | 111 } |
110 | 112 |
111 | 113 |
112 ngx_fd_t ngx_open_tempfile(u_char *name, ngx_uint_t persistent) | 114 ngx_fd_t |
115 ngx_open_tempfile(u_char *name, ngx_uint_t persistent) | |
113 { | 116 { |
114 ngx_fd_t fd; | 117 ngx_fd_t fd; |
115 | 118 |
116 fd = open((const char *) name, O_CREAT|O_EXCL|O_RDWR, 0600); | 119 fd = open((const char *) name, O_CREAT|O_EXCL|O_RDWR, 0600); |
117 | 120 |
123 } | 126 } |
124 | 127 |
125 | 128 |
126 #define NGX_IOVS 8 | 129 #define NGX_IOVS 8 |
127 | 130 |
128 ssize_t ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, | 131 ssize_t |
129 off_t offset, ngx_pool_t *pool) | 132 ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset, |
133 ngx_pool_t *pool) | |
130 { | 134 { |
131 u_char *prev; | 135 u_char *prev; |
132 size_t size; | 136 size_t size; |
133 ssize_t n; | 137 ssize_t n; |
134 ngx_array_t vec; | 138 ngx_array_t vec; |
214 | 218 |
215 return n; | 219 return n; |
216 } | 220 } |
217 | 221 |
218 | 222 |
219 ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir) | 223 ngx_int_t |
224 ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir) | |
220 { | 225 { |
221 dir->dir = opendir((const char *) name->data); | 226 dir->dir = opendir((const char *) name->data); |
222 | 227 |
223 if (dir->dir == NULL) { | 228 if (dir->dir == NULL) { |
224 return NGX_ERROR; | 229 return NGX_ERROR; |
226 | 231 |
227 dir->valid_info = 0; | 232 dir->valid_info = 0; |
228 | 233 |
229 return NGX_OK; | 234 return NGX_OK; |
230 } | 235 } |
236 | |
237 | |
238 ngx_int_t | |
239 ngx_lock_file(ngx_file_t *file) | |
240 { | |
241 ngx_err_t err; | |
242 struct flock fl; | |
243 | |
244 fl.l_whence = SEEK_SET; | |
245 fl.l_len = 0; | |
246 fl.l_pid = 0; | |
247 fl.l_type = F_WRLCK; | |
248 fl.l_start = 0; | |
249 | |
250 if (fcntl(file->fd, F_SETLK, &fl) == -1) { | |
251 err = ngx_errno; | |
252 | |
253 if (err == NGX_EAGAIN) { | |
254 return NGX_BUSY; | |
255 } | |
256 | |
257 ngx_log_error(NGX_LOG_ALERT, file->log, err, | |
258 "fcntl(%s, F_SETLK, F_WRLCK) failed", file->name.data); | |
259 | |
260 return NGX_ERROR; | |
261 } | |
262 | |
263 return NGX_OK; | |
264 } | |
265 | |
266 | |
267 ngx_int_t | |
268 ngx_unlock_file(ngx_file_t *file) | |
269 { | |
270 ngx_err_t err; | |
271 struct flock fl; | |
272 | |
273 fl.l_whence = SEEK_SET; | |
274 fl.l_len = 0; | |
275 fl.l_pid = 0; | |
276 fl.l_type = F_UNLCK; | |
277 fl.l_start = 0; | |
278 | |
279 if (fcntl(file->fd, F_SETLK, &fl) == -1) { | |
280 err = ngx_errno; | |
281 | |
282 if (err == NGX_EAGAIN) { | |
283 return NGX_BUSY; | |
284 } | |
285 | |
286 ngx_log_error(NGX_LOG_ALERT, file->log, err, | |
287 "fcntl(%s, F_SETLK, F_UNLCK) failed", file->name.data); | |
288 | |
289 return NGX_ERROR; | |
290 } | |
291 | |
292 return NGX_OK; | |
293 } |