小编Nan*_*iao的帖子

如何让一个阻塞在recv()上的线程优雅地退出?

有一个线程喜欢这个:

{  
    ......    
    while (1)
    {
        recv(socket, buffer, sizeof(buffer), 0);
        ......
    }
    close(socket);           
}  
Run Code Online (Sandbox Code Playgroud)

因为线程在recv()调用时阻塞,我怎么能让线程正常退出?

c unix sockets multithreading

8
推荐指数
2
解决办法
5767
查看次数

如何理解Haskell中的"(Num b)=> length :: [a] - > b"?

我正在读" 了解你是一个很好的Haskell!,并遇到以下字词:

例如,length函数具有length :: [a] - > Int的类型声明,而不是具有更通用的类型(Num b)=> length :: [a] - > b.

怎么理解" (Num b) => length :: [a] -> b"这里?不应该是" length :: (Num b) => [a] -> b"吗?

haskell

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

"docker exec"命令的"-i"和"-t"选项的用途是什么?

说实话,我一直困惑docker exec -it …,docker exec -i …docker exec -t …,所以我决定做一个测试:

  1. docker exec -it …:

    # docker exec -it 115c89122e72 bash
    root@115c89122e72:/# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    
    Run Code Online (Sandbox Code Playgroud)

    它正常工作.

  2. docker exec -i …:

    # docker exec -i 115c89122e72 bash
    ^C
    
    Run Code Online (Sandbox Code Playgroud)

    命令挂起,我必须使用Ctl+ c来中断它.

  3. docker exec -t …:

    # docker exec -t 115c89122e72 bash
    root@115c89122e72:/# ls
    ^C …
    Run Code Online (Sandbox Code Playgroud)

linux tty docker

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

`return 5;`Rust中的语句或表达式?

我不是一个挑剔者,而是来自陈述和表达:

我们实际上已经使用过语句和表达式.语句是执行某些操作但不返回值的指令.表达式评估结果值.我们来看一些例子.

......

表达式不包括结尾分号.如果在表达式的末尾添加分号,则将其转换为语句,然后不返回值.在您接下来探索函数返回值和表达式时,请记住这一点.

那么return 5;,它是一个陈述还是表达?如果是声明,则声明不应返回值; 如果是表达式,则表达式不应具有结尾分号.

rust

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

" - // dev/null"在"gcc -dM -E - </ dev/null"中的含义是什么?

我知道用的

gcc -dM -E - < /dev/null
Run Code Online (Sandbox Code Playgroud)

可以得到预定的宏gcc,但是什么呢

- < /dev/null
Run Code Online (Sandbox Code Playgroud)

这个命令意味着什么?根据我的理解,背后应该有一个选项-.我试图搜索gcc手册,但找不到答案.

c c++ bash gcc

7
推荐指数
1
解决办法
746
查看次数

如何在docker中成功启用udev同步?

我已docker 1.6.1从此站点下载并安装静态链接,并在以下位置运行RHEL 7.1:

[root@localhost bin]# ./docker -d
WARN[0000] Udev sync is not supported. This will lead to unexpected behavior, data loss and errors
INFO[0000] +job init_networkdriver()
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] -job init_networkdriver() = OK (0)
INFO[0000] Loading containers: start.

INFO[0000] Loading containers: done.
INFO[0000] docker daemon: 1.6.1 97cd073; execdriver: native-0.2; graphdriver: devicemapper
INFO[0000] +job acceptconnections()
INFO[0000] -job acceptconnections() = OK (0)
INFO[0000] Daemon has completed …
Run Code Online (Sandbox Code Playgroud)

linux rhel go docker rhel7

7
推荐指数
1
解决办法
4186
查看次数

为什么在Rust中比在C中更新大型静态浮点数组的程序更慢?

我写了一个简单的程序来比较Rust和C的性能.

Rust版本:

use std::time::Instant;

const STREAM_ARRAY_SIZE: usize = 10000000;
static mut A: [f64; STREAM_ARRAY_SIZE] = [1.0; STREAM_ARRAY_SIZE];

fn main() {
    let now = Instant::now();

    unsafe {
        for i in 0..STREAM_ARRAY_SIZE {
            A[i] = 2.0E0 * A[i];
        }
    }

    let duration = now.elapsed();
    println!("{}", (duration.as_secs() * 1_000_000_000 + duration.subsec_nanos() as u64) / 1000);
}
Run Code Online (Sandbox Code Playgroud)

在调试和发布模式下运行它:

$ ./target/debug/calc
472046 us.
$ ./target/release/calc
62860 us.
Run Code Online (Sandbox Code Playgroud)

与调试相比,发布版本具有显着的性能提升.

C版本做同样的事情并在同一台服务器上运行:

#include <sys/time.h>
#include <stdio.h>

#define STREAM_ARRAY_SIZE   10000000

static double A[STREAM_ARRAY_SIZE];
int mysecond(void)
{
        struct timeval tp; …
Run Code Online (Sandbox Code Playgroud)

c performance rust

7
推荐指数
1
解决办法
205
查看次数

使用gdb调试程序时,有命令输出文件描述符信息吗?

当我使用gdb调试程序时,我想查看有关调试进度的文件描述符信息。我使用“info file”、“info proc”命令,但这些命令输出不包含文件描述符信息。那么使用 gdb\xef\xbc\x9f 时是否有命令输出文件描述符信息 先谢谢了!

\n

debugging gdb

6
推荐指数
1
解决办法
1631
查看次数

定义函数类型和函数指针类型有什么区别?

据我所知,我可以定义一个函数类型:

typedef void (fn)(void);
Run Code Online (Sandbox Code Playgroud)

我还可以定义一个函数指针类型:

typedef void (*pfn)(void);
Run Code Online (Sandbox Code Playgroud)

有2个功能.第一个函数的参数类型是一个函数,另一个是函数指针:

void a(fn fn1)
{
    fn1();
}

void b(pfn fn1)
{
    fn1();
}  
Run Code Online (Sandbox Code Playgroud)

我实现了一个函数回调:

void callback(void)
{
    printf("hello\n");
}
Run Code Online (Sandbox Code Playgroud)

并将其作为参数传递给a和b:

int main(void) {
    a(callback);
    b(callback);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

a和b都运行良好,并打印"hello".

所以我想知道定义函数类型和函数指针类型有什么区别?或者实际上,它们是一样的?

c

6
推荐指数
1
解决办法
764
查看次数

为什么C++不为枚举类型提供默认的"operator >>"函数?

我发现C++提供了类型的默认operator<<函数enum:

#include <iostream>
using namespace std;

enum OpType {
    Select,
    Insert
};

int main() {
    OpType t = Select;
    cout << t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行结果是:

0
Run Code Online (Sandbox Code Playgroud)

虽然不提供默认operator>>功能:

#include <iostream>
using namespace std;

enum OpType {
    Select,
    Insert
};

int main() {
    OpType t = Select;
    cin >> t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建它将生成以下编译错误:

prog.cpp: In function ‘int main()’:
prog.cpp:11:6: error: no match for ‘operator>>’ (operand types are ‘std::istream {aka std::basic_istream<char>}’ and ‘OpType’)
  cin >> …
Run Code Online (Sandbox Code Playgroud)

c++ enums

6
推荐指数
1
解决办法
206
查看次数

标签 统计

c ×4

c++ ×2

docker ×2

linux ×2

rust ×2

bash ×1

debugging ×1

enums ×1

gcc ×1

gdb ×1

go ×1

haskell ×1

multithreading ×1

performance ×1

rhel ×1

rhel7 ×1

sockets ×1

tty ×1

unix ×1