精华内容
下载资源
问答
  • Vulkan【6】创建一个交换

    千次阅读 2018-08-20 11:21:43
    创建一个交换 本节的代码是 05-init_swapchain.cpp 本节描述如何创建交换,它是最终显示给用户的图像缓冲区列表。这是建立呈现所需的所有缓冲区所需的第一个步骤之一。 这是一个关于交换的视图,它与...

    创建一个交换链

    本节的代码是 05-init_swapchain.cpp

    本节描述如何创建交换链,它是最终显示给用户的图像缓冲区列表。这是建立呈现所需的所有缓冲区所需的第一个步骤之一。

    这是一个关于交换链的视图,它与系统的其他部分有关。其中一些部分很常见,剩下的部分将在本节中学习。

    这里写图片描述

    Vulkan和窗口系统

    与其他图形API一样,Vulkan将窗口系统方面与核心图形API分离开来。
    在Vulkan中,窗口系统的详细信息通过WSI(窗口系统集成)扩展公开。
    您可以在使用WSI内容的Vulkan规范文档中找到这些扩展的文档。Vulkan 规范LunarG LunarXchange websiteKhronos Vulkan Registry

    WSI扩展包含对各种平台的支持。扩展被激活为一个特定的平台,通过定义:

    • VK_USE_PLATFORM_ANDROID_KHR - Android
    • VK_USE_PLATFORM_MIR_KHR - Mir
    • VK_USE_PLATFORM_WAYLAND_KHR - Wayland
    • VK_USE_PLATFORM_WIN32_KHR - Microsoft Windows
    • VK_USE_PLATFORM_XCB_KHR - X Window System, using the XCB library
    • VK_USE_PLATFORM_XLIB_KHR - X Window System, using the Xlib library

    该名称的“KHR”部分表明该符号是在Khronos扩展中定义的。

    Surface 抽象

    Vulkan使用VkSurfaceKHR对象来抽象本机平台的Surface 或窗口。这个符号定义为VK KHR表面扩展的一部分。WSI扩展中的各种函数被用来创建、操作和销毁这些Surface 对象。

    回顾实例和设备扩展

    由于您在本教程前几节中推迟了使用扩展,现在是重新回顾它们的时候了,这样您就可以激活WSI扩展,您需要使用它来与窗口系统进行交互。

    实例扩展

    为了使用WSI扩展,您需要激活通用的surface 扩展。在示例中找到 init_instance_extension_names()函数中的代码,该函数将 init_instance_extension_names()添加到加载的实例扩展列表中。

    info.instance_extension_names.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
    

    还要注意的是,这个函数决定了特定于平台的扩展,这取决于所构建代码的平台。
    例如,如果为Windows构建的话,该函数会将VK_KHR_WIN32_SURFACE_EXTENSION_NAME
    添加到加载的实例扩展列表中。

    info.instance_extension_names.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
    

    当实例被创建时,在init_instance()函数中加载这些扩展。

    设备扩展

    交换链是一个GPU渲染图像缓冲区列表,并将其呈现给显示硬件,以便扫描输出到显示器。
    由于GPU硬件是为这些图像编写的,所以需要一个设备级的扩展来处理交换链。
    因此,样例代码将VK_KHR_SWAPCHAIN_EXTENSION_NAME的设备扩展添加到设备扩展列表中,以便加载init_device_extension_names()

    info.device_extension_names.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
    

    这个扩展在本节稍后将使用,用以创建交换链。

    简要概括:

    • 本示例使用init_instance_extension_names()函数来加载一般的surface扩展和特定于平台的surface扩展作为实例扩展。
    • 该示例使用init_device_extension_names()函数来加载交换链扩展作为设备扩展。

    通过访问LunarG LunarXchange website.,您可以了解更多关于实例和设备扩展的信息

    队列家族 和“呈现”

    “呈现”操作包括将一个交换链的图像放到物理显示器上,这样就可以查看它了。当应用程序想要将图像呈现给显示器时,它会使用vkQueuePresentKHR()函数将当前请求放到GPU的队列中。因此,这个函数引用的队列必须能够支持呈现请求,或者图形和呈现请求。示例如下:

    // Iterate over each queue to learn whether it supports presenting:
    VkBool32 *pSupportsPresent =
        (VkBool32 *)malloc(info.queue_family_count * sizeof(VkBool32));
    for (uint32_t i = 0; i < info.queue_family_count; i++) {
        vkGetPhysicalDeviceSurfaceSupportKHR(info.gpus[0], i, info.surface,
                                             &pSupportsPresent[i]);
    }
    
    // Search for a graphics and a present queue in the array of queue
    // families, try to find one that supports both
    info.graphics_queue_family_index = UINT32_MAX;
    info.present_queue_family_index = UINT32_MAX;
    for (uint32_t i = 0; i < info.queue_family_count; ++i) {
        if ((info.queue_props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0) {
            if (info.graphics_queue_family_index == UINT32_MAX)
                info.graphics_queue_family_index = i;
    
            if (pSupportsPresent[i] == VK_TRUE) {
                info.graphics_queue_family_index = i;
                info.present_queue_family_index = i;
                break;
            }
        }
    }
    
    if (info.present_queue_family_index == UINT32_MAX) {
        // If didn't find a queue that supports both graphics and present, then
        // find a separate present queue.
        for (size_t i = 0; i < info.queue_family_count; ++i)
            if (pSupportsPresent[i] == VK_TRUE) {
                info.present_queue_family_index = i;
                break;
            }
    }
    free(pSupportsPresent);
    

    这段代码重新使用了之前获得的 info.queue_family_count,因为vkGetPhysicalDeviceSurfaceSupportKHR()为每个队列家族返回一个flag。
    然后搜索一个同时支持呈现和图形的队列家族。如果没有队列家族能同时满足呈现和图形,程序会先记住支持图形的队列家族,然后再去搜索支持呈现的队列家族。
    graphics_queue_family_indexpresent_queue_family_index都被这段代码设置时,示例的后面必须使用来自graphics_queue_family_index的队列用于图形指令,以及来自present_queue_family_index的队列用于呈现。

    是的,这有点冗余,之前在“设备”章节中只进行了搜索一个支持图形的队列家族,这只是为了便于说明。一个真正的应用程序可以以不同的顺序执行这些步骤,以避免重复。

    如果没有这样的队列家族,示例程序会直接退出。

    交换链创建信息

    本节其余部分的大部分工作都是为了填充这个create info结构,用于创建交换链:

    typedef struct VkSwapchainCreateInfoKHR {
        VkStructureType                  sType;
        const void*                      pNext;
        VkSwapchainCreateFlagsKHR        flags;
        VkSurfaceKHR                     surface;
        uint32_t                         minImageCount;
        VkFormat                         imageFormat;
        VkColorSpaceKHR                  imageColorSpace;
        VkExtent2D                       imageExtent;
        uint32_t                         imageArrayLayers;
        VkImageUsageFlags                imageUsage;
        VkSharingMode                    imageSharingMode;
        uint32_t                         queueFamilyIndexCount;
        const uint32_t*                  pQueueFamilyIndices;
        VkSurfaceTransformFlagBitsKHR    preTransform;
        VkCompositeAlphaFlagBitsKHR      compositeAlpha;
        VkPresentModeKHR                 presentMode;
        VkBool32                         clipped;
        VkSwapchainKHR                   oldSwapchain;
    } VkSwapchainCreateInfoKHR;
    

    创建一个表面(Surface)

    随着WSI扩展在实例和设备中加载,您现在可以创建一个VkSurface,这样您就可以继续进行构建交换链了。您再次需要使用特定于平台的代码,出现在05-init_swapchain.cpp的顶部:

    #ifdef _WIN32
        VkWin32SurfaceCreateInfoKHR createInfo = {};
        createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
        createInfo.pNext = NULL;
        createInfo.hinstance = info.connection;
        createInfo.hwnd = info.window;
        res = vkCreateWin32SurfaceKHR(info.inst, &createInfo, NULL, &info.surface);
    #endif
    

    info.connectioninfo.window 的值是在init_connection()init_window()函数中包含的更特定于平台的代码中设置的,您也可以在示例代码中找到它们。

    请注意,init_connection()init_window()函数也负责连接到显示器的特定于平台的操作,并创造实际的窗口。您刚刚用vkCreateWin32SurfaceKHR() 函数创建的VkSurfaceKHR是由Vulkan用于平台窗口对象的句柄来表示的。

    然后将生成的表面添加到交换链的create info结构:

    VkSwapchainCreateInfoKHR swapchain_ci = {};
    swapchain_ci.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
    swapchain_ci.pNext = NULL;
    swapchain_ci.surface = info.surface;
    

    设备表面格式(Device Surface Formats)

    您还需要在创建交换链时指定表面的格式。在这种情况下,“格式”指的是VkFormat枚举所描述的像素格式,
    VK_FORMAT_B8G8R8A8_UNORM是设备表面格式的一个常见值。

    示例中的下一段代码将获得VkSurfaceFormatKHR结构的列表,其中包含由display支持的VkFormat格式,以及其他信息。因为这些示例并不关心
    显示图像和表面使用的格式,所以示例只是选择了第一个可用的格式,如果没有指定的话,就会返回到任意的、但常见的格式。

    看一看示例中的代码,它最终在create info结构中设置了格式:

    swapchain_ci.imageFormat = info.format;
    

    表面能力(Surface Capabilities)

    为了继续填充 create info 结构, 示例调用 vkGetPhysicalDeviceSurfaceCapabilitiesKHR()vkGetPhysicalDeviceSurfacePresentModesKHR() 来获得必要的信息。 然后,它可以填充以下字段:

    uint32_t desiredNumberOfSwapChainImages = surfCapabilities.minImageCount;
    
    swapchain_ci.minImageCount = desiredNumberOfSwapChainImages;
    swapchain_ci.imageExtent.width = swapChainExtent.width;
    swapchain_ci.imageExtent.height = swapChainExtent.height;
    swapchain_ci.preTransform = preTransform;
    swapchain_ci.presentMode = swapchainPresentMode;
    

    您应该将minImageCount成员设置为代表应用程序使用的缓冲策略的值,例如双缓冲或三重缓冲。这个示例查询一个交换链中可以使用的最少数量的图像,这些图像使用的是vkGetPhysicalDeviceSurfaceCapabilitiesKHR()函数,将结果存储在surfCapabilities中。要求这个最小数量的图像可以确保我们可以获得一个可呈现的图像,只要我们在试图获得另一个图像之前就展示它。这表示一个双缓冲配置,因为您将让一个图像进行渲染,而另一个图像正在呈现。如果你想要三次缓冲,那么你会要求一个更多的图像,然后在你展示它们之前,你可以获得两个缓冲。

    用于图形和当前的不同队列家族

    您在队列家族中确定了图形和呈现队列。如果它们是不同的,您需要做一些额外的工作,以允许在队列家族之间共享图像。

    swapchain_ci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
    swapchain_ci.queueFamilyIndexCount = 0;
    swapchain_ci.pQueueFamilyIndices = NULL;
    uint32_t queueFamilyIndices[2] = {
        (uint32_t)info.graphics_queue_family_index,
        (uint32_t)info.present_queue_family_index};
    if (info.graphics_queue_family_index != info.present_queue_family_index) {
        // If the graphics and present queues are from different queue families,
        // we either have to explicitly transfer ownership of images between the
        // queues, or we have to create the swapchain with imageSharingMode
        // as VK_SHARING_MODE_CONCURRENT
        swapchain_ci.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
        swapchain_ci.queueFamilyIndexCount = 2;
        swapchain_ci.pQueueFamilyIndices = queueFamilyIndices;
    }
    

    上面的字段提供了创建交换链所需的更多基本信息。您可以在示例中检查其余的代码,以了解如何获得这些信息,以及如何填写create info结构的其余部分。

    创建交换链

    当交换链的 create info 结构填充完成,你现在就可以创建交换链了:

    res = vkCreateSwapchainKHR(info.device, &swapchain_ci, NULL, &info.swap_chain);
    

    这个调用创建了组成交换链的一组图像。在某种程度上,你需要对单个图像进行处理,这样你就可以告诉GPU哪些图像用于渲染。vkCreateSwapchainKHR()函数创建图像本身,因此保持了对句柄的跟踪。
    样例通过使用我们熟悉的查询模式来获得图像句柄的个数,通过调用

    vkGetSwapchainImagesKHR(info.device, info.swap_chain,
                            &info.swapchainImageCount, NULL);
    

    然后再次调用这个函数来获取一张图像句柄的列表,并将它们存储在info.buffer中。现在你有了一个目标图像句柄的列表。

    创建图像视图(Create Image Views)

    您需要告诉Vulkan,通过创建图像视图,您打算如何使用这些交换链图像。“视图”本质上是附加到一个资源的附加信息,该信息了如何使用该资源。

    属于图像的内存区域可以以多种方式排列,这取决于图像的预期用途。例如,图像可以是1D、2D或3D。或者可以有一系列的图像,等等。描述图像的格式(例如,VK_FORMAT_R8G8B8A8_UNORM)、组件的顺序和层信息也是很有用的。所有这些信息都是包含在VkImageView中的图像元数据。

    创建图像视图非常简单。在05-init_swapchain.cpp中找到VkImageViewCreateInfo 结构。并看到它被填充了你对2D framebuffer所期望的值。注意图像句柄本身存储在图像视图中。

    然后,您可以通过在info 数据结构中存储图像视图句柄来完成交换链的创建,以便以后使用。

    © Copyright 2016 LunarG, Inc

    展开全文
  • 本文转自:sql server 数据库创建链接服务器访问另外一个sql server 数据库 继上篇在sql server中创建链接服务器访问oracle数据库:http://www.cnblogs.com/527289276qq/p/4770379.html 本文介绍在sql server中...

    本文转自:sql server 数据库创建链接服务器访问另外一个sql server 数据库

    继上篇在sql server中创建链接服务器访问oracle数据库:http://www.cnblogs.com/527289276qq/p/4770379.html

    本文介绍在sql server中创建链接服务器访问sql server数据库。

    方法:

    打开SSMS,新建程序,执行下面sql语句块:

    -- 注册远程数据库实例
    EXEC  sp_addlinkedserver
    @server='DBMES',   --链接服务器别名
    @srvproduct='',
    @provider='SQLOLEDB',
    @datasrc='192.168.5.139\实例名'  --要访问的的数据库所在的服务器的ip+数据库实例名
    GO
    
    -- 注册远程实例登陆访问帐户
    EXEC sp_addlinkedsrvlogin
    'DBMES',                  --链接服务器别名
    'false', 
     NULL,
    'sa',                     --要访问的数据库的用户              
    'xxxx'                    --要访问的数据库,用户的密码
    GO

    其中,”链接服务器别名”随便取, 只需修改”要访问的的数据库所在的服务器的ip+数据库实例名”,“用户”和“密“码 (我用的要访问的sql sever数据库sa账号和密码)。

    成功执行后,刷新SSMS左侧链接服务器,会出现新建的链接服务器,如下图:

    图1

    最后我们测试一下,查询被访问的数据库上的表,sql语句类似如下:

    SELECT * FROM [DBMES].[数据库名].[dbo].[表名]

    运行结果截图:

    图2

    链接服务器其它相关操作如下:

    存储过程名/视图名 作用 举例
    sp_addlinkedserver 注册远程数据库实例 exec sp_addlinkedserver ‘InstanceName’
    sp_dropserver 删除远程数据库实例 exec sp_dropserver ‘InstanceName’
    sp_addlinkedsrvlogin 注册远程实例登陆访问帐户 exec sp_addlinkedsrvlogin ‘InstanceName’, null
    sp_droplinkedsrvlogin 删除远程实例登陆访问帐户 exec sp_droplinkedsrvlogin ‘InstanceName’,’UserName’
    sp_helpserver 当前实例已注册的可访问的实例(即查看使用sp_addlinkedserver已注册过的实例) sp_helpserver
    sys.sysservers 功能同sp_helpserver select * from sys.sysservers
    sys.linked_logins 查看已注册的登陆访问帐户(即查看使用sp_addlinkedsrvlogin已注册过的帐户) select * from sys.linked_logins
    sys.remote_logins 查看已注册的远端访问帐户 select * from sys.remote_logins

    参考:sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    展开全文
  • 如何创建一个完整的SpringBoot项目 Spring Boot项目可以直接创建然后配置,也可以通过创建Maven项目的方法创建SpringBoot项目 本文主要讲述的是创建一个Maven项目,并将其转为一个SpringBoot项目 1、新建一个...

    如何创建一个完整的SpringBoot项目

    Spring Boot项目可以直接创建然后配置,也可以通过创建Maven项目的方法创建SpringBoot项目

    本文主要讲述的是创建一个Maven项目,并将其转为一个SpringBoot项目

    1、新建一个Maven项目

    空白--右击--new--other--输入maven--选择maven project

    ​​

    next--选择quickstart结尾的这个

    ​​

    groudId:项目结构的唯一标识符,一般是cn、org、com等专用词加上公司名

    artifiedId:项目的唯一标识符,也就是项目名称

    version:版本(1.0)

    package:包结构 一般就是groundId.Artified,如果有项目群,就是groundId.项目群名.项目名

    ​​

    finish--开始创建maven项目--查看右下方进度,完成后才进行下一步操作

    ​​

    2、补充添加其他的包

    (1)右击新建的项目--properties--java build path--source--add folder

    ​​

    (2)选中main----点create new folder就可以新建和main的子文件夹,然后输入文件夹名称:resource

    重复此步骤,输入文件夹名称:webapp

    ​​

    (3)查看excluded是否都是none,如果是**则点击remove,确保全部是none后apply。

    ​​

    3、(可忽略)调整文件夹的顺序

    还是上一个界面, 点击order and export,可以调整

    一般顺序是:main java --- > test java ---> main resource ---> jar包 ----> main webapp.

    调整后apply and close

    ​​

    4、(可忽略)把test.java下的所有的包和文件都删除

    5、修改配置文件pom.xml(划重点!!!)

    参考链接springBoot配置文件pom.xml的详细解释+实例

    1. 版本信息精简(version直接写1.0)
    2. 添加parent和properties内容
    3. 基本环境配置
    4. 常用依赖配置

    依赖较多,此处仅显示一部分,具体的内容见链接springBoot配置文件pom.xml的详细解释+实例

    ​​

    6、编写启动类(启动类其实就是项目名的包下自动生成的一个Java文件,但是要修改)

    1. 重命名:项目名加上application,或者项目名加上app
    2. 声明这是启动类:添加注解@SpringBootApplication
    3. 修改main方法:SpringApplication.run(类名.classes,args);

    ​​

    7、在配置文件中添加上启动类的信息

    (若在步骤5中已经配置,请检查是否配置对,否则运行不成功)

    在pom.xml的properties的start-class里配置(包名.类名)

    ​​

    8、清除多余的jar包,重新加载jar包,刷新项目(非常重要!!!!)

    PS:此步骤耗时较长,请耐心,不要急,精度条没有走完不要下一步)

    (1)项目右击--run as--maven clean--等待进度条完毕后下一步

    (2)项目右击--run as --maven install--等待进度条完毕后下一步

    (3)项目右击--maven--update project--等待进度条完毕

    (ps:如果全部步骤配置完成后,项目不能正常运行,可以重复步骤8,以及Eclipse顶部菜单栏上project的clean操作,保证步骤8顺利结束的前提下,再去看控制台有没有报其他的错误。)

    9、检查excluded(千万不要跳过)

    项目右击--properties--Java build path--sources--查看excluded是否都是none,如果是**则点击remove,确保全部是none后点击apply and close。

    10、webapp下添加文件夹

       10.1、右击webapp--new--Folder--填写文件夹名

    ( css :放css文件 views:放jsp页面 js:放js文件 imgs:放图片)

      10.2、选中新建的文件夹--build path--use as ...---位置变了---再选中一次---build path--remove ...

      10.3、重复前面两步,,完成后结构如图:

    11、新建配置文件appication.properties

    resource包--右击--新建--file--输入application.properties,内容如图

    (1)server.port是端口号,监听浏览器发送请求,该端口默认8080,为了避免重复声明一下,自己定义即可,一般是五位数。

    (2)server.tomcat.uri-encoding编码格式

    (3)spring.mvc.view.prefix 规定访问的路径的前缀

    (4)spring.mvc.view.suffix规定访问的路径的后缀

    ​​

    12、全部配置完毕,编写测试的文件

          12.1、webapp下的views中新建一个jsp页面 , 比如main.jsp

         在<body>中写 : ”Hello ,SpringBoot!“

         12.2、action包下新建一个类PageAction,专门用于页面跳转

         @Controller这个注解表示这是一个控制类

         @RequestMapping是一个用来处理请求地址映射的注解

          return ”main“就是跳转到main.jsp界面

    ​​

        12.3、action下新建一个类FileMethodAction,通过ModelAndView绑定前端jsp界面

    ​​

    13、测试

      13.1、点击甲壳虫图标

    ​​

    13.2、控制台console出现started字样说明项目启动成功。(见下图最后一行)

    ​​

    13.3、打开浏览器,输入http://localhost:10501可以测试PageAction;

    输入http://localhost:10501/fileMethod/page可以测试FileMethodAction

    13.4 、页面跳转成功出现main界面的内容:Hello ,SpringBoot,说明测试成功,项目运行正常。

     

    附:springboot测试的方法

    打开浏览器访问url地址:http://localhost:端口号/info如果正常说明基本无问题

    测试方法:设置断点然后打开浏览器:

    不映射:http://localhost:端口号

    不带参数的映射:http://localhost:端口号/类处理请求地址映射的注解的value值/方法处理请求地址映射的注解的value值

    带参数的映射:http://localhost:端口号/类处理请求地址映射的注解的value值/方法处理请求地址映射的注解的value值?方法的参数名1=参数值1&方法的参数名2=参数名2

     

    展开全文
  • 可以对图片上某几个点进行定位之后,然后创建可点击热区,形成可点击区域,...但是这里有一个关键的并不常用的属性,那就是usemap,它指定了你要选择的地图,也就是使用哪种地图方式来展示里面的链接。示例代码如下:

    可以对图片上某几个点进行定位之后,然后创建可点击热区,形成可点击区域,此项技术常常运用在一些购物网站上,非常简单并且非常有用:

    首先,将想要显示的图片,使用HTML标签将其显示在页面中,代码很简单,不做过多解释。但是这里有一个关键的并不常用的属性,那就是usemap,它指定了你要选择的地图,也就是使用哪种地图方式来展示里面的链接。示例代码如下:

    <img src="planets.jpg" border="0" usemap="#imgMap" alt="Planets" />


    接下来,定义Map地图,并将Map分块,用以区分不同的内容区域。


    Map地图由<map>标签和<area>标签组成。<map>标签的定义非常简单,只需声明id和name即可,因为不同浏览器识别的标签不一样,所以id和name二者缺一不可。<area>标签因为不常用,下面的图表展示了各个属性所代表的的确切含义。

    属性

    描述

    coords

    坐标值

    定义可点击区域(对鼠标敏感的区域)的坐标。

    href

    URL

    定义此区域的目标 URL。

    shape

    default

    rect

    circ

    poly

    定义区域的形状。

    target

    _blank

    _parent

    _self

    _top

    规定在何处打开 href 属性指定的目标 URL。

    Map地图的示例代码如下:

    <map name="imgMap" id="imgMap">

      <area shape="circle" coords="180,139,14" href ="venus.html" alt="Venus" />

      <area shape="circle" coords="129,161,10" href ="mercur.html" alt="Mercury" />

      <area shape="rect" coords="0,0,110,260" href ="sun.html" alt="Sun" />

    </map>

    到此为止,我们就可以轻松创建自己的图片地图了。然而,对于如何图片中某个元素的坐标对很多小伙伴来说,仍然是一个难题,因为普通的看图软件根本无法查看每个元素的坐标位置。在这里,给大家推荐一款在线工具:Image-Maps 。我们只需在Image-Maps 上注册一个账号,就能够通过可视化工具对图片进行剪裁,获取裁剪的图片的坐标。


    展开全文
  • Linux上创建和更改硬链接和符号链接

    万次阅读 2016-07-06 02:05:24
    概述 在本篇中,学习创建和管理硬链接和符号链接...有关某个文件的信息包含在一个 inode 中,它记录了所有者、最后访问该文件的时间、文件的大小、它是否是目录,以及谁可以读取或写入它等信息。inode 编号也称为 文件
  • 创建(十字表)

    千次阅读 2014-02-08 08:48:44
    十字表方式存储: 十字链表的节点结构:节点+前驱节点链表+后继节点链表 十字链表的边结构:头节点+尾节点+尾节点的前驱节点链表+头节点的后继节点链表.   对于如下结构: 转换为十字表:     十字...
  • 网站图片防盗

    千次阅读 2018-12-21 21:05:57
    前言 我们在浏览网站时,每个网站都有很多图片,这些图片一般都在服务器的某个文件夹存储的。...首先我们不能直接在前端调用图片,我们可以先创建一个一般处理程序(.ashx),把我们想要调用的图片...
  • dubbo调用/过滤器创建分析

    千次阅读 2017-02-01 12:15:48
    功能的实现是通过Dubbo内置的Filter或用户自定义的Filter来创建调用完成。当发起方法调用时,会执行调用各个结点的方法,以完成一些处理工作。 调用/过滤器创建分析 调用的构
  • 图片热区链接

    千次阅读 2007-03-29 10:51:00
    一般的图片链接,一张只能对应一个链接,能不能一张对应多个链接呢?答案是可以的。选取一张图片后,可以在属性面板看到Map选项。其中: 创建矩形热区, 创建原形热区, 创建多边形热区。例如我们现在点 ,光标...
  • ln(即link) 的功能是为某一个文件在另外一个位置建立一个同步的链接。有两种链接方式,一种是硬链接(hard link),另一种是符号链接(symbolic link),又称软链接。硬链接和原有文件是存储在同一物理地址的两个...
  • windows 系统创建文件链接 mklink

    千次阅读 2018-06-16 13:39:09
    mklink [选项] 链接文件 目标文件链接文件:即我们要创建的链接到某个目录或文件的“类似快捷方式”的文件目标文件:要链接到的目录或文件常用选项: /D:创建目录链接(若无则是创建文件链接) 其他两选项用得不...
  • 设计一个只能创建一个唯一实例的类——单例模式 1. 背景  老师布置了一个思考题:设计一个只能创建一个唯一实例的类。让我们只要想一下思路即可。自己的第一反应就是设计模式中的单例模式。自己百度了一下单例...
  • vue 创建一个登录界面

    万次阅读 热门讨论 2019-07-15 19:53:03
    vue创建一个登录界面
  • 本文给大家介绍,如何创建标准合约的步骤,已经管理后台的基本功能。 标准合约完整的流程可参考下: 2,标准合约申请流程 https://baas.cloud.alipay.com以已开通创新大赛权限(参考第二课 蚂蚁区块链第2课...
  • 本篇文章主要结合之前...区块链上第一个区块叫做创世块,创建我们私的时候可通过创世块配置文件来声明和定义。把以下文件内容存储为genesis.json文件 { "coinbase": "0x0000000000000000000000000000000000000000",
  • sqlserver中创建链接服务器图解教程

    万次阅读 2017-12-01 14:54:45
    1.展开服务器对象-->链接服务器-->右击"新建链接服务器"   注意:必须以数据库管理员身份登录(通常也就是sa帐号)后,才...现在测试一下,用帐号user本地登录SqlServer,新建一个查询,输入Select * From [链接服
  • RobotStudio仿真—Smart组件创建动态输送

    万次阅读 多人点赞 2017-06-20 19:42:12
    、Smart组件 创建受信号与属性控制的动作组件。 不同于事件管理器的是,它适用于中大型工作站应用中,显示动态工作流程,更直观。 二、码垛工作站 产品从输送一端产生,然后沿着输送运动...
  • 本文给大家介绍,如何创建标TEE硬件隐私合约的步骤,以及 管理后台的基本功能。 TEE硬件隐私合约完整的流程可参考下: 2,TEE硬件隐私合约申请流程 https://baas.cloud.alipay.com以已开通创新大赛权限...
  • Intellij Idea作为一款编程工具,自从尝到它的强大功能带来的甜头后,就再也不想用Eclipse来进行开发了。下面用它来演示一下如何创建一个普通的Java工程,并导入MySql数据库的驱动包,用JDBC方式来连接数据库。
  • 下载防盗链图片的关键

    千次阅读 2012-07-04 16:10:03
    下载防盗链图片的关键在于设置 Request.Referer 属性...假设图片所在页面地址为urlPage图片地址为 srcImg那么应该// 创建一个URL请求 Uri uriImg = new Uri(srcImg); HttpWebRequest req = (HttpWebRequest)WebReques
  • 破解图片防盗方法

    千次阅读 2016-04-19 10:58:48
    对于想直接通过来访问人家的链接的网站来说的症状就是,人家显示一个警告图片,你想看的图片莫名奇妙的变成了提示页面。  为此我们不得不破解图片防盗的方法。  思路如下:你直接将图片的链接在浏览器...
  • Openstack中演示如何创建一个虚拟机

    千次阅读 2018-02-10 11:21:01
    创建一个虚拟机最后点击Launch,开始创建虚拟机下创建虚拟机的过程,Status为Build,Task为Spawning(孵化,产生的意思)下为虚拟机创建完成的界面点击vm1链接,展示虚拟机的基本信息下为虚拟机控制台...
  • 如题,我在dll中,调用d3d10.dll里面的createdeviceandswapchain函数创建交换的时候,提示不能再dllmain中调用IDXGICreate..我应该怎么在dll中创建交换呢?
  • 使用Numpy创建纯色图片

    千次阅读 2019-06-03 00:20:40
    那就意味着可以通过numpy来创建一个图片 如果电脑上没有numpy的话需要先装一下 pip install numpy 可以通过numpy的zeros来创建一个空数组 import cv2 as cv import numpy as np def create_image(): ...
  • 联盟是一个虚拟组织,由多个机构组成。联盟机构可以: 共享联盟区块链 创建区块链应用,并共享给联盟内的其他机构 创建联盟 登录控制台,点击 产品与服务 > 区块链 >...
  • 设备、交换和设备环境如何创建 设备环境是什么?创建设备、交换和设备...当然你也可以调用每具体类型的D3D函数创建(如CreateSwapChain仅仅创建交换)。 D3D11CreateDeviceAndSwapChain函数的参数值如下:
  • apache 实现图片防盗

    千次阅读 2017-04-10 21:07:26
    什么是防盗? 照搬百度百科 ...比较常见的是一些小站盗用大站的资源(图片、音乐、视频),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的
  • VS 如何创建一个MVC框架

    千次阅读 2019-01-18 15:42:27
    VS 如何创建一个MVC框架 开发工具与关键技术:VS 如何创建一个MVC框架 作者:胡宁淇 撰写时间:2019年1月17日 ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。 ASP.NET 支持三种...
  • 用Maven创建一个web项目

    万次阅读 多人点赞 2016-07-27 10:36:56
    原文地址:http://www.cnblogs.com/leiOOlei/p/3361633.html 一.创建项目 1.Eclipse中用Maven创建项目 上中Next   2.继续Next 3.选maven-archetype-webapp...4.填写相应的信息,Packaged是默认创建一个

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 986,314
精华内容 394,525
关键字:

如何创建一个图链