fuse_dfs.c
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. #include "fuse_dfs.h"
  19. #include "fuse_options.h"
  20. #include "fuse_impls.h"
  21. #include "fuse_init.h"
  22. int is_protected(const char *path) {
  23.   dfs_context *dfs = (dfs_context*)fuse_get_context()->private_data;
  24.   assert(dfs != NULL);
  25.   assert(dfs->protectedpaths);
  26.   int i ;
  27.   for (i = 0; dfs->protectedpaths[i]; i++) {
  28.     if (strcmp(path, dfs->protectedpaths[i]) == 0) {
  29.       return 1;
  30.     }
  31.   }
  32.   return 0;
  33. }
  34. static struct fuse_operations dfs_oper = {
  35.   .getattr = dfs_getattr,
  36.   .access = dfs_access,
  37.   .readdir = dfs_readdir,
  38.   .destroy       = dfs_destroy,
  39.   .init         = dfs_init,
  40.   .open         = dfs_open,
  41.   .read         = dfs_read,
  42.   .symlink = dfs_symlink,
  43.   .statfs = dfs_statfs,
  44.   .mkdir = dfs_mkdir,
  45.   .rmdir = dfs_rmdir,
  46.   .rename = dfs_rename,
  47.   .unlink       = dfs_unlink,
  48.   .release      = dfs_release,
  49.   .create       = dfs_create,
  50.   .write = dfs_write,
  51.   .flush        = dfs_flush,
  52.   .mknod        = dfs_mknod,
  53. .utimens = dfs_utimens,
  54.   .chmod = dfs_chmod,
  55.   .chown = dfs_chown,
  56.   .truncate = dfs_truncate,
  57. };
  58. int main(int argc, char *argv[])
  59. {
  60.   umask(0);
  61.   extern const char *program;  
  62.   program = argv[0];
  63.   struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
  64.   /* clear structure that holds our options */
  65.   memset(&options, 0, sizeof(struct options));
  66.   // some defaults
  67.   options.rdbuffer_size = 10*1024*1024; 
  68.   options.attribute_timeout = 60; 
  69.   options.entry_timeout = 60;
  70.   if (fuse_opt_parse(&args, &options, dfs_opts, dfs_options) == -1)
  71.     /** error parsing options */
  72.     return -1;
  73.   // Some fuse options we set
  74.   if (! options.private) {
  75.     fuse_opt_add_arg(&args, "-oallow_other");
  76.   }
  77.   if (!options.no_permissions) {
  78.     fuse_opt_add_arg(&args, "-odefault_permissions");
  79.   }
  80.   {
  81.     char buf[1024];
  82.     snprintf(buf, sizeof buf, "-oattr_timeout=%d",options.attribute_timeout);
  83.     fuse_opt_add_arg(&args, buf);
  84.     snprintf(buf, sizeof buf, "-oentry_timeout=%d",options.entry_timeout);
  85.     fuse_opt_add_arg(&args, buf);
  86.   }
  87.   if (options.server == NULL || options.port == 0) {
  88.     print_usage(argv[0]);
  89.     exit(0);
  90.   }
  91.   // 
  92.   // Check we can connect to hdfs
  93.   // 
  94.   if (options.initchecks == 1) {
  95.     hdfsFS temp;
  96.     if ((temp = hdfsConnect(options.server, options.port)) == NULL) {
  97.       const char *cp = getenv("CLASSPATH");
  98.       const char *ld = getenv("LD_LIBRARY_PATH");
  99.       fprintf(stderr, "FATAL: misconfiguration problem, cannot connect to hdfs - here's your environmentn");
  100.       fprintf(stderr, "LD_LIBRARY_PATH=%sn",ld == NULL ? "NULL" : ld);
  101.       fprintf(stderr, "CLASSPATH=%sn",cp == NULL ? "NULL" : cp);
  102.       syslog(LOG_ERR, "FATAL: misconfiguration problem, cannot connect to hdfs - here's your environmentn");
  103.       syslog(LOG_ERR, "LD_LIBRARY_PATH=%sn",ld == NULL ? "NULL" : ld);
  104.       syslog(LOG_ERR, "CLASSPATH=%sn",cp == NULL ? "NULL" : cp);
  105.       exit(0);
  106.     }  
  107.     temp = NULL;
  108.   }
  109.   int ret = fuse_main(args.argc, args.argv, &dfs_oper, NULL);
  110.   if (ret) printf("n");
  111.   /** free arguments */
  112.   fuse_opt_free_args(&args);
  113.   return ret;
  114. }