小编lim*_*imp的帖子

发生溢出,但errno不是ERANGE.这是怎么发生的?

我正在尝试使用errno来检测我是否执行了导致溢出的操作.然而,虽然我写了一个故意溢出的功能,但是errno == ERANGE是假的.这里发生了什么?

这是代码:

#include <stdio.h>
#include <errno.h>

int main(int argc, char* argv[]) {
    unsigned char c = 0;
    int i;

    for (i = 0; i< 300; i++) {
        errno = 0;
        c = c + 1;
        if (errno == ERANGE) {// we have a range error
            printf("Overflow. c = %u\n", c);
        } else {
            printf("No error. c = %u\n", c);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我预计这会在我们添加1到255的位置发出溢出错误,但没有错误.这是(截断的)输出:

No error. c = 245
No error. c = …
Run Code Online (Sandbox Code Playgroud)

c overflow errno

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

"绑定:已经在使用的地址",即使设置了SO_REUSEADDR也是如此

我写了一个简单的echo服务器,其中包括以下行:

int yes = 1;
if (setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
    perror("setsockopt");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,当我尝试呼叫bind我最近使用的套接字时,我仍然会收到错误.事实上,如果我试图调用bind我在这个程序中使用的套接字,即使它不是最近的 - 就像它们没有被内核或其他东西清除一样,我会收到此错误.我还有别的办法吗?

这是完整的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>

void prepareHints(struct addrinfo *hints, int tcp_udp) {
    memset(hints, 0, sizeof(struct addrinfo));
    hints->ai_family = AF_UNSPEC;
    hints->ai_socktype = (tcp_udp == 1) ? SOCK_STREAM : SOCK_DGRAM;
    hints->ai_flags = AI_PASSIVE; /* autofill IP */
}

void writeSocket(int fd, const char *msg) {
    size_t …
Run Code Online (Sandbox Code Playgroud)

c sockets bind

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

当值有空格时Redis SET失败

我刚刚启动了 Redis 并且正在玩弄它。以下工作正常:

SET billybob "hello"
+OK
Run Code Online (Sandbox Code Playgroud)

但是,以下失败:

SET billybob "hey how are you"
-ERR syntax error
Run Code Online (Sandbox Code Playgroud)

我认为 SET 适用于任何键/值,并且大概一个值可以是任何字符串......但不是带有空格的字符串?这里有什么故事?

string space redis

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

用布尔值检查Rust枚举的类型?

我希望用户将命令行参数传递给我在Rust中编写的简单函数.我知道我可以int::from_str(args[1])用来转换,但这会返回一个Option<int>,这意味着为了将它传递给一个函数,int如下所示,我必须使用一个match语句.但是有了n个参数,就有2 ^ n种可能性.match用一些东西编写一系列嵌套语句会很糟糕.如果有办法做某事,那将是理想的:

// will return either Some(int) or None
let start = int::from_str(args[1]), end = int::from_str(args[2]);
if typeof(start) == Some && typeof(end) == Some { 
    println(fmt!("You entered: %d, %d", start, end); 
} else { 
    println("Error with arguments."); 
}
Run Code Online (Sandbox Code Playgroud)

有没有这样的方法?这让我可以测试枚举中的哪个成员match

enums match rust

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

Python:从二进制文件而不是文件名打开zip文件

有没有办法ZipFile通过传入 zip 文件的文字字节来初始化对象,而不是让它读取文件名?我正在构建一个不需要接触磁盘的宁静应用程序;它只是打开文件,对其进行一些处理,重新压缩并发送它。

python zip zipfile

4
推荐指数
1
解决办法
5032
查看次数

设置超时,超时无效

我正试图用一些代码来测试我的服务器:

describe 'POST /do/some/stuff/', ->
  it 'should do this thing', (done) ->
    request app
      .post '/do/some/stuff/'
      .timeout 10000
      .expect 200
      .end (err, res) ->
        return done err if err?
        done()
Run Code Online (Sandbox Code Playgroud)

服务器正在做的事情通常需要几秒钟,这比默认超时2000毫秒长,所以我打电话.timeout 10000.但是,尽管如此,当我运行代码时,我得到:

1) POST /do/some/stuff/ should do this thing:
   Error: timeout of 2000ms exceeded
Run Code Online (Sandbox Code Playgroud)

我需要做些什么来增加此超时?

mocha.js node.js supertest

4
推荐指数
1
解决办法
5637
查看次数

如何使bash函数在任何错误上返回1

我有一个假的bash函数,如:

has_error() {
  true
  echo "Ok..."
  false
  echo "Shouldn't be here!"
}
Run Code Online (Sandbox Code Playgroud)

当我运行此函数并检查错误状态时,我希望发生什么:

> has_error; echo $?
Ok...
1
Run Code Online (Sandbox Code Playgroud)

但实际发生了什么:

> has_error; echo $?
Ok...
Shouldn't be here!
0
Run Code Online (Sandbox Code Playgroud)

问题是该函数在抛出错误后继续执行,而且,我甚至无法检测到抛出了错误.我怎么能改变这个?我可以set -e在函数的开头放一个,但是如果抛出错误,我的整个shell都会终止.我想要的是简单地让它返回并将退出状态设置为1.我可以&&通过插入命令之间或通过后缀每一行来完成它|| return 1,但这些都不是很优雅.这样做的正确方法是什么?

编辑:

似乎我不够清楚,因为很多回复似乎表明我实际上并不知道如何在bash中执行测试.正如我上面提到的,我知道我可以在我的函数中手动测试每个命令,并根据需要返回或处理错误.我也知道我可以set -e并且导致我的shell会话因错误而终止.但我要问的是:有没有办法让函数停止继续执行 - 没有明确的测试 - 如果该函数中的任何命令返回非零状态?

bash exit-code

4
推荐指数
2
解决办法
3995
查看次数

管道进入 grep -v 时获取退出代码

我有一个这样的脚本:

#!/bin/sh

echo "hello"
echo "goodbye"
exit 1
Run Code Online (Sandbox Code Playgroud)

当我自己运行它时,我得到了我预期的失败退出代码。

$ ./fail.sh
hello
goodbye
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时grep -v,退出状态更改为成功:

$ ./fail.sh | grep -v hello
goodbye
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

有没有办法将命令的输出通过管道输入grep -v并仍然正确传播状态代码?当然,在现实世界中,这样做的目的是过滤嘈杂命令的输出,同时仍然检测命令是否失败。

bash grep exit-code

4
推荐指数
1
解决办法
4227
查看次数

使用docker commit删除现有图像?

我有一个用于构建docker映像的脚本。该脚本启动docker commitdocker 容器,在其上执行一些命令,然后对图像进行固定。当我提交一个带有映像名称/标签的映像,然后又提交带有相同映像名称/标签的映像时,我希望删除上一个映像,因为这时它仅占用了磁盘空间。相反,它会停留在周围(我可以在中看到它docker images,其存储库和标签都列为<none>)。有没有办法让docker自动删除这些替换的图像?

docker

4
推荐指数
1
解决办法
2215
查看次数

Bootstrap列未显示为内联

我是初学者和CSS的新手.我有一些看起来像这样的HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>My Site</title>
    <link rel="stylesheet" href="/css/bootstrap-theme.css">
    <link rel="stylesheet" href="/css/font-awesome.css">
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-md-1"><span class="fa fa-caret-down"></span></div>
        <div class="col-md-1"><span id="cool-title">My Site</span></div>
        <div class="col-md-1">
          <input type="text" placeholder="Search" class="search-bar">
        </div>
        <div class="col-md-1">
          <button class="btn btn-default"><i class="fa fa-search col-md-1"></i></button>
        </div>
      </div>
      <div id="main">
      </div>
    </div>
    <script src="/js/jquery.js"></script>
    <script src="/js/bootstrap.js"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我希望所有这些col-div都被内联,但它们都出现在他们自己的行上:

没有内联

这里发生了什么?

css twitter-bootstrap

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