GVKun编程网logo

在Perl中的“打开function”和“触摸命令”之间的区别?

6

如果您想了解在Perl中的“打开function”和“触摸命令”之间的区别?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.NET正则表达式中的“组”和“捕获”之间有什么区别?、acti

如果您想了解在Perl中的“打开function”和“触摸命令”之间的区别?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.NET正则表达式中的“组”和“捕获”之间有什么区别?、active-directory – “新域树根”和“新子域”之间的区别?、android – Toast:“this”和“getApplicationContext()”之间的区别?、asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?的有价值的信息。

本文目录一览:

在Perl中的“打开function”和“触摸命令”之间的区别?

在Perl中的“打开function”和“触摸命令”之间的区别?

在以下两种情况下创build文件有什么不同?

open(DATA,">newfile.txt"); #1.using open function close(DATA); `touch newfile.txt`; #2.using touch command

哪一个更好,更快? 注意:在Perl脚本中同时使用open函数和touch命令,并考虑用于创build空文件。

使新文件自动可执行?

子文件夹允许的最大深度是多less?

用C ++自定义标准input到系统调用

文件按string一行input到数组中

如何检查一个文件是否存在,并在C ++中可读?

明显的区别在于,在第二种情况下,你要出门到系统。 启动一个运行该命令的shell或者通过execvp系统调用运行该命令(取决于参数,见下文)。 还有很多事情,还有一些事情可能会出错。

更重要的是,还有更多的事情要做。 如果文件已经存在? 一方面, open将截断它,而touch只会更新时间戳。 但是你想要一个新的文件,所以你需要首先检查。 如果这失败了呢? 你需要检查。 因此,这应该是一个小程序。

然后用Perl编写。 委托这样一个简单的工作没有任何好处,只有陷阱。

注意:使用三参数open

open my $fh,'>',$file

与所有必要的检查。 那么你也有一个更好的词法(间接)文件句柄来处理。

感谢hek2mgi的意见和ikegami澄清, qx可能绕过shell取决于参数(什么看起来没有文档?),就像系统一样。

这可以通过strace -f script.pl来检查,通过脚本中的qx(touch "NEW") ,我们可以找到该行

[pid 24332] execve(“/ bin / sh”,[“sh”,“-c”,“touch ”NEWFILE “”],[/ * ...

而在脚本的输出中没有/bin/sh qx(touch NEW) (没有引号,没有shell)。

要注意的是, qx确实接受一个数组(文档中没有提到),这显然是内插的。 这可以从qx(@cmd)上的strace -f输出中看到@cmd = qw(ls -l > tt.out)

[pid 30773] execve(“/ bin / sh”,[“sh”,“-c”,“ls -l> tt.out”],[/ * ...

然后,如果需要(这个例子),运行一个shell,而不是( qw(ls -l )),如上所述。

*哪一个更好更快?

这个问题没有意义。 这两个片段是不相同的,所以你应该问“哪一个做我想要的? open会open文件,如果它存在,而touch将保持不变。

至于在使用系统调用vs炮击运行一个外部命令之间哪一个更好,如果你不把这个问题的大部分代码都省略掉,答案是显而易见的!

直接使用系统调用:

utime(undef,undef,$qfn) or die("Can't touch "$qfn": $!n");

通过外部命令使用系统调用:

use String::ShellQuote qw( shell_quote ); my $cmd = shell_quote("touch","--",$qfn); my $output = `$cmd 2>&1`; die("Can't touch "$qfn": Killed by signal ".($? & 0x7F)."n" if $? & 0x7F; die("Can't touch "$qfn": Exited with error ".($? >> 8).": $output" if $? >> 8;

正如你所看到的那样,炮击远远更复杂和容易出错。 当然,启动整个程序来进行系统调用而不是仅仅进行系统调用要慢得多。

他们是两个非常不同的命令。

touch用于修改文件的访问和修改时间。 默认情况下,它将访问和修改时间设置为当前时间,如果该文件不存在,则会将其创建为空文件。

open是为了打开文件阅读或写作。 根据给定的模式,open命令也可以创建一个不存在的文件。

要使用touch手段来调用一个单独的进程(一个shell),所以给定的限制, open API命令是首选。

打开功能用于读取/写入文件。 该函数使用文件描述符,然后写入指定的文件。 而触摸功能创建一个新的文件。

open :用于读/写。

touch :用于更新/修改。

但是, touch通过实际克隆(perl克隆)来运行另一个进程来打开一个shell。

.NET正则表达式中的“组”和“捕获”之间有什么区别?

.NET正则表达式中的“组”和“捕获”之间有什么区别?

对于.NET的正则表达式语言,“组”和“捕获”之间的区别让我有些模糊。考虑以下C#代码:

MatchCollection matches = Regex.Matches("{Q}", @"^\{([A-Z])\}$");

我希望这会导致字母’Q’的单个捕获,但是如果我打印返回的属性,则会MatchCollection看到:

matches.Count: 1matches[0].Value: {Q}        matches[0].Captures.Count: 1                matches[0].Captures[0].Value: {Q}        matches[0].Groups.Count: 2                matches[0].Groups[0].Value: {Q}                matches[0].Groups[0].Captures.Count: 1                        matches[0].Groups[0].Captures[0].Value: {Q}                matches[0].Groups[1].Value: Q                matches[0].Groups[1].Captures.Count: 1                        matches[0].Groups[1].Captures[0].Value: Q

这到底是怎么回事?我知道整个比赛也都有机会,但是小组如何进入?为什么不matches[0].Captures包括字母“ Q”的捕获?

答案1

小编典典

您不会是第一个对此感到困惑的人。以下是著名的杰弗里·弗里德尔(Jeffrey
Friedl)所说的话(第437页以上):

根据您的观点,它要么为比赛结果添加了有趣的新维度,要么使您感到困惑和膨胀。

进一步:

Group对象和Capture对象之间的主要区别在于,每个Group对象都包含一个Captures集合,这些Collections表示
该组在匹配过程中的所有 中间 匹配项以及该组匹配的最终文本。

几页后,这就是他的结论:

在了解了.NET文档并真正理解了这些对象的内容之后,我对它们有了不同的看法。一方面,这是一个有趣的创新[..];另一方面,它似乎增加了大多数情况下不会使用的功能的效率负担[..]

换句话说:它们非常相似,但是偶尔会碰巧有它们的用处。在长出另一头灰色胡须之前,您甚至可能喜欢Captures …


由于以上内容和其他文章中的内容均未真正回答您的问题,请考虑以下内容。将Captures视为一种历史跟踪器。当正则表达式匹配时,它从左到右遍历字符串(暂时忽略回溯),当遇到匹配的捕获括号时,它将存储在$x(x是任何数字)中,比方说$1

普通的正则表达式引擎在要重复捕获括号时会丢弃当前值$1,并将其替换为新值。不是.NET,它将保留此历史记录并将其放置在.NET中Captures[0]

如果我们将您的正则表达式更改为如下所示:

MatchCollection matches = Regex.Matches("{Q}{R}{S}", @"(\{[A-Z]\})+");

您会注意到第一个Group有一个Captures(第一个组始终是整个匹配项,即等于$0),第二个将保持{S},即只有最后一个匹配组。然而,这里的渔获物,如果你想找到另外两个锁扣,他们在Captures,它包含了所有中介捕获的{Q}
{R}{S}

如果您想知道如何从多重捕获(仅显示最后一个匹配项与字符串中明显存在的单个捕获项)中获得收益,则必须使用Captures

关于最后一个问题的最后一句话:总比赛总有一个总夺球,不要将其与各个组混合使用。 捕获只是在小组内部有趣

active-directory – “新域树根”和“新子域”之间的区别?

active-directory – “新域树根”和“新子域”之间的区别?

我有2台 Windows 2008 R2服务器.已经安装了AD和DNS.它被设置为新森林中的新树.

现在我必须添加第二台服务器,即第一台服务器委托的dns区域.第一台服务器是foo.com,第二台服务器是bar.foo.com

在设置过程中,我选择“现有森林”.它不是一个额外的域控制器,因此我选择“在现有林中创建新域”.然后我看到了“创建一个新的域树根而不是一个新的子域”选项.

它令我感到困惑,因为我不知道其含义是什么.

我在MS Paint中使用了所有技能来创建场景的图表表示:

我应该在评论前加上这个答案.我不知道你的基础设施,所以如果不适用,请原谅我.对于大多数组织,Microsoft不建议使用子域或单独的树根.当前建议是单个AD域,其中业务单位由OU分隔以进行管理.除非您有一个非常令人信服的理由通过这样做来使AD结构复杂化,否则我建议您重新考虑您的设计并评估单个AD域是否更适合.

以上是每个例子.在第二个例子中,两个域之间没有明确的信任,但仍然存在隐含的信任.

您必须在两者之间使用信任快捷方式,否则每当发出跨域资源请求时,都必须始终查询林根.

android – Toast:“this”和“getApplicationContext()”之间的区别?

android – Toast:“this”和“getApplicationContext()”之间的区别?

我的设备运行 Android 5.1.1,我发现如果我使用
Toast.makeText(this,"This is a toast",Toast.LENGTH_SHORT).show();

我懂了:

round toast

但是如果我使用getApplicationContext()而不是这个,

Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();

我懂了:

两者都直接从活动中调用.

为什么是这样?

解决方法

它与上下文关联的主题有关.使用这是使用与应用程序上下文不同的主题的上下文(我假设您的Activity或Fragment).

如果您有理由需要使用应用程序上下文,则可以将其包装到您的活动正在使用的主题(通常设置在AndroidManifest.xml中),并且应该显示“round”的吐司.

Toast.makeText(new ContextThemeWrapper(getApplicationContext(),R.style.AppTheme),Toast.LENGTH_SHORT).show();

asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?

asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?

适用于ASP.NET 5应用程序的 documentation for using project.json包含一个示例project.json文件(以下简称为版本)。

frameworkAssemblies和依赖关系有什么区别?

为什么dnx451使用一个和dnxcore50使用其他?

{
  "version": "0.1-alpha-*",...
  "frameworks": {
    "dnx451": {
     "frameworkAssemblies": {
        ...
      }
    },"dnxcore50": {
     "dependencies": {
       ...
     }
  }
}

解决方法

frameworkAssemblies是指GAC(全局程序集缓存)中存在的程序集。

考虑以下示例:
我想使用ADO.NET apis(sqlConnection,sqlCommand)来处理sql Server数据库。我知道这些apis是System.Data.dll的一部分,因此要引用它。现在安装完整版本的.NET Framework后,它会在GAC中安装一些程序集(也有这个System.Data.dll),因此您可以在下面的示例中看到对框架构件的引用。来到CoreClr,我需要找出这些类型存在于哪个包中。为此,您可以使用名为PackageSearch的网站(由ASP.NET团队成员构建),您可以在其中搜索类型并查找包名称。基于此,您将找到System.Data.sqlClient作为包。由于此软件包是为CoreClr构建的,因此它是dnxcore50部分中依赖关系部分的一部分。

{
    "version": "1.0.0-*","description": "Test App","dependencies": {
    },"frameworks": {
        "dnx451": {
            "frameworkAssemblies": {
                "System.Data": "4.0.0.0"
            }
        },"dnxcore50": {
            "dependencies": {
                "System.Data.sqlClient": "4.0.0-beta-*"
            }
        }
    }
}

现在我们来说,你甚至想在你的应用程序中添加对json序列化和反序列化的支持,并且想要引用Json.Net nuget包。 Json.Net nuget软件包支持桌面和核心clr,因此您可以将它放在两个框架通用的依赖项中。

{
    "version": "1.0.0-*","dependencies": {
        "Newtonsoft.Json": "6.0.6"
    },"dnxcore50": {
            "dependencies": {
                "System.Data.sqlClient": "4.0.0-beta-*"
            }
        }
    }
}

今天关于在Perl中的“打开function”和“触摸命令”之间的区别?的介绍到此结束,谢谢您的阅读,有关.NET正则表达式中的“组”和“捕获”之间有什么区别?、active-directory – “新域树根”和“新子域”之间的区别?、android – Toast:“this”和“getApplicationContext()”之间的区别?、asp.net – project.json中的“依赖关系”和“框架集”之间有什么区别?等更多相关知识的信息可以在本站进行查询。

本文标签: