小编use*_*625的帖子

任何人都可以在fork()之后解释关于'文件描述符'的简单描述吗?

在"Unix环境中的高级编程",第2版,作者:W.Richard Stevens.

第8.3节fork函数.

这是描述:

父和子共享相同的文件偏移量很重要.

考虑一个分叉孩子的过程,然后等待孩子完成.假设两个进程都写入标准输出作为其正常处理的一部分.如果父级的标准输出重定向(可能是shell),则当子级写入标准输出时,子级必须更新父级的文件偏移量.

[1.这是什么意思?例如,如果父项的std输出被重定向到'file1',那么子项写入后子项应该更新什么?parent的原始std输出偏移量或重定向输出(即file1)偏移量?不能晚了,对吧?

[2.更新是如何完成的?由子显式,由OS隐式地,由文件描述符本身?在fork之后,我认为父母和孩子走自己的路,并拥有自己的文件描述符COPY.那么孩子如何更新偏移到父方?]

在这种情况下,孩子可以在父母等待时写入标准输出; 在孩子完成后,父母可以继续写入标准输出,知道其输出将附加到孩子写的任何内容.如果父级和子级没有共享相同的文件偏移量,则此类交互将更难以完成,并且需要父级的显式操作.

如果父节点和子节点都写入相同的描述符,而没有任何形式的同步,例如让父节点等待子节点,则它们的输出将被混合(假设它是在fork之前打开的描述符).虽然这是可能的,但这不是正常的操作模式.

在fork之后处理描述符有两种正常情况.

  1. 父母等待孩子完成.在这种情况下,父级不需要对其描述符执行任何操作.当子进程终止时,子进程读取或写入的任何共享描述符将相应地更新其文件偏移量.

  2. 父母和孩子都有自己的方式.这里,在fork之后,父关闭它不需要的描述符,并且子进行相同的操作.这样,既不会干扰对方的开放描述符.网络服务器经常出现这种情况."

[3.当调用fork()时,我理解的是那个子得到了父有什么的COPY,在这种情况下是文件描述符,并做了它的事情.如果任何偏移更改为父和子共享的文件描述符,则只能因为描述符记住偏移本身.我对吗?]

对不起,我对这些概念不太了解.

有帮助吗?谢谢.

c unix fork file-descriptor

33
推荐指数
2
解决办法
3万
查看次数

装饰设计模式与继承?

我已经阅读了维基百科的装饰设计模式,以及该网站的代码示例.

我认为传统继承遵循'is-a'模式,而decorator遵循'has-a'模式.装饰者的调用约定看起来像'皮肤'上的'皮肤'......超过'核心'.例如

I* anXYZ = new Z( new Y( new X( new A ) ) );
Run Code Online (Sandbox Code Playgroud)

如上面的代码示例链接所示.

但是仍然有一些我不明白的问题:

  1. wiki是什么意思'装饰模式可以用来在运行时扩展(装饰)某个对象的功能'?'new ...(new ...(new ...))'是一个运行时调用,但很好但是'AwithXYZ anXYZ;' 是编译时的继承而且不好?

  2. 从代码示例链接中我可以看到,两个实现中类定义数量几乎相同.我记得在其他一些设计模式书中,比如"Head first design patterns".他们使用starbuzz咖啡作为例子,并说传统的继承将导致"阶级爆炸",因为对于每种咖啡组合,你会想出一个类.

    但在这种情况下装饰者是不是一样的?如果一个装饰器类可以接受任何抽象类并进行装饰,那么我猜它确实可以防止爆炸,但是从代码示例中,你可以得到确切的类定义,不能少......

有人会解释吗?

c++ design-patterns

24
推荐指数
2
解决办法
7430
查看次数

中断处理程序中的C printf()?

我听说C中的printf()不应该用于ISR.是因为它是一个阻止呼叫,还是因为它不是可重入的?

如果printf()不是可重入的,那么它不会意味着它也不能用于多线程程序,除非它以某种方式"同步"吗?

谢谢,

c multithreading interrupt-handling

9
推荐指数
1
解决办法
6826
查看次数

ISR和多线程程序中的C'Volatile'关键字?

我读到了volatile内存映射硬件寄存器,ISR和多线程程序中C 关键字的用法.

1)注册

uint8_t volatile * pReg;
while (*pReg == 0) { // do sth } // pReg point to status register 
Run Code Online (Sandbox Code Playgroud)

2)ISR

int volatile flag = 0;
int main() 
{
    while(!flag) { // do sth }
}
interrupt void rx_isr(void)
{
    //change flag
}
Run Code Online (Sandbox Code Playgroud)

3)多线程

int volatile var = 0;
int task1()
{
    while (var == 0) { // do sth }
}
int task2()
{
    var++;
}
Run Code Online (Sandbox Code Playgroud)

我可以看出为什么编译器可以错误地优化while以防万一1)如果volatile不存在,'因为变量是由硬件进行的,编译器可能看不到代码所做的变量的任何变化. …

c embedded multithreading

8
推荐指数
1
解决办法
2559
查看次数

这个shell脚本行与awk的含义

我在书籍[linux device drivers]中阅读了这一行脚本.任何人都可以帮助解释它的作用(可能只是几个字)?

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)
Run Code Online (Sandbox Code Playgroud)

在上下文中:

#!/bin/sh
module="scull"   
device="scull"  
mode="664"

# invoke insmod with all arguments we got  
# and use a pathname, as newer modutils don't look in . by default

/sbin/insmod ./$module.ko $* || exit 1


# remove stale nodes  
rm -f /dev/${device}[0-3]   

major=$(awk "\\$2=  =\"$module\" {print \\$1}" /proc/devices)

mknod /dev/${device}0 c $major 0
....
Run Code Online (Sandbox Code Playgroud)

bash shell awk

6
推荐指数
2
解决办法
1468
查看次数

为什么朋友会员功能无法自动识别为功能模板?

c ++ faq 35.16

http://www.parashift.com/c++-faq-lite/template-friends.html

#include <iostream>

template<typename T>
class Foo {
public:
  Foo(T const& value = T());
  friend Foo<T> operator+ (const Foo<T>& lhs, const Foo<T>& rhs);
  friend std::ostream& operator<< (std::ostream& o, const Foo<T>& x);
private:
  T value_;
};
Run Code Online (Sandbox Code Playgroud)

汽车公司声称:

当编译器在类定义中看到朋友行正确时,就会发生这种障碍.那时它还不知道朋友函数本身就是模板(为什么它不是类模板成员函数默认是函数模板?) ; 它假设它们是非模板这样的:'

Foo<int> operator+ (const Foo<int>& lhs, const Foo<int>& rhs)
{ ... }  

std::ostream& operator<< (std::ostream& o, const Foo<int>& x)
{ ... }
Run Code Online (Sandbox Code Playgroud)

为什么上面的非模板?是不是通过int实例化的这些模板?

'当你调用operator +或operator <<函数时,这个假设会导致编译器生成对非模板函数的调用,但是链接器会给你一个"未定义的外部"错误,因为你从未真正定义过那些非模板函数."

实际上,为了使编译器将上面的内容识别为函数模板,程序员必须明确地执行此操作,如下所示:

template<typename T> class Foo;  // pre-declare the template class itself …
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
640
查看次数

如何在selenium webdriver中等待启用输入元素?

我正在编写脚本来选择并在JIRA的下面的屏幕中输入值.

在此输入图像描述 '问题类型'是具有自动完成属性的'input'元素:

<input type="text" autocomplete="off" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" class="text aui-ss-field ajs-dirty-warning-exempt" id="issuetype-field" aria-controls="issuetype-suggestions">
Run Code Online (Sandbox Code Playgroud)

在输入"输入类型"的值后,其他字段(如"摘要")将灰显几秒钟.如果我尝试输入'summary'字段的值,请使用以下代码:

myDriver.findElement(By.id("summary")).sendKeys(summary);
Run Code Online (Sandbox Code Playgroud)

将不会输入摘要字段,而是会出现错误"在缓存中找不到元素 - 可能页面自查找以来已更改...".

"摘要"字段的HTML代码是:

<input type="text" value="" name="summary" id="summary" class="text long-field">
Run Code Online (Sandbox Code Playgroud)

所以我想要的只是等待'summary'输入字段被启用然后sendkey到它.我正在寻找类似的东西

ExpectedConditions.presenceOfElementLocated 
Run Code Online (Sandbox Code Playgroud)

但相反,我希望' 启用 ',而不是presenceOfElementLocatedvisibilityOfElementLocated.我不想用Thread.sleep().

有什么建议?

html selenium-webdriver

5
推荐指数
2
解决办法
2万
查看次数

如何在 Gherkin 的场景大纲中使用类似文档字符串的内容?

我正在用 Cucumber Java 做一个简单的 rest api 测试。响应采用 Json 格式。

我写的小黄瓜特征文件看起来像:

  Scenario:  
    Given I query service by "employees"
    When I make the rest call
    Then response should contain:
      """
      {"employees":[
      {"firstName":"John", "lastName":"Doe"},
      {"firstName":"Anna", "lastName":"Smith"},
      {"firstName":"Peter", "lastName":"Jones"}
      ]}
      """
Run Code Online (Sandbox Code Playgroud)

现在,由于有多个查询要使用不同的参数(如“员工”、“部门”等)进行测试,因此很自然地编写 Scenario Outline 来执行任务:

  Scenario Outline: 
    Given I query service by "<category>"
    When I make the rest call
    Then response should contain "<json_string_for_that_category>"
    Examples:
      | category     | json_string_for_that_category     |
      | employee     | "json_string_expected_for_employee"  |
      | department   | "json_string_expected_for_department"|
Run Code Online (Sandbox Code Playgroud)

其中 json_string_expected_for_employee 只是:

  {"employees":[
  {"firstName":"John", …
Run Code Online (Sandbox Code Playgroud)

json cucumber gherkin cucumber-java

5
推荐指数
1
解决办法
4965
查看次数

为什么黄瓜量角器不会完全忽略没有要运行的标签的特征文件?

我正在使用黄瓜量角器框架来运行功能文件。

在我的 config.js 中,我有:

specs: [
    "../../features/XXX1.feature",
    "../../features/XXX2.feature",
    ... 
    "../../features/XXXn.feature",                            
],

cucumberOpts: {
    tags: "@mytag",
},
Run Code Online (Sandbox Code Playgroud)

在我的功能文件 XXX1.feature 中,我设置了这个标签“@mytag”:

  @mytag
  Scenario Outline: my Flow
    Given I am running test case one
    ....
Run Code Online (Sandbox Code Playgroud)

但不在任何其他功能文件中,如 XXX2.feature、XXX3.feature 等。

我期望量角器仅运行 XXX1.feature,而不运行 XXX2.feature。确实如此,当谈到 XXX2.feature 时,它​​会启动浏览器,什么也不做,然后输出以下内容:

[14:35:53] I/testLogger - [chrome #01-2] PID: 14272
[chrome #01-2] Specs: D:\ptfbc\ui\features\XXX2.feature
[chrome #01-2]
[chrome #01-2] [14:35:44] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub
[chrome #01-2]
[chrome #01-2]
[chrome #01-2] 0 scenarios
[chrome #01-2] 0 steps
[chrome #01-2] …
Run Code Online (Sandbox Code Playgroud)

protractor cucumberjs

5
推荐指数
1
解决办法
927
查看次数

在 POSTMAN 中,如何获取响应标头项的子字符串?

我正在使用邮递员来获取如下响应标头值:

var data = postman.getResponseHeader("Location") . //value is "http://aaa/bbb" for example 
Run Code Online (Sandbox Code Playgroud)

我可以通过打印值 console.log(data)轻松。

然而,我真正想要的是“bbb”。所以我需要某种substring()类型的功能。显然 'data' 不是 javascript 字符串类型,因为data.substring(10)例如总是返回 null。

在这种情况下,有人需要我做什么吗?

如果有任何邮递员 API 文档可以解释这一点?

postman postman-pre-request-script

5
推荐指数
0
解决办法
7935
查看次数