小编o11*_*11c的帖子

C:如何从文件描述符更改为FILE结构,反之亦然?

有没有办法将int文件描述符更改为FILE结构指针或/和更改FILE*为C中的文件描述符?

c linux

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

表达式中有序列点a ^ = b ^ = a ^ = b,还是未定义?

据称"巧妙"(但实际上效率低下)交换两个整数变量而不是使用临时存储的方式通常涉及这一行:

int a = 10;
int b = 42;

a ^= b ^= a ^= b; /*Here*/

printf("a=%d, b=%d\n", a, b); 
Run Code Online (Sandbox Code Playgroud)

但我想知道,复合赋值运算符^=不是序列点,是吗?这是否意味着它实际上是未定义的行为?

c undefined-behavior sequence-points compound-assignment

13
推荐指数
4
解决办法
617
查看次数

IPv6:在侦听连接时,`::'是否等同于'0.0.0.0'?

当我检查的输出IPGlobalProperties.GetActiveTcpListeners(),我看到听众的0.0.0.0以及::.

我相信在端口上0.0.0.0监听相当于监听任何网络适配器上的端口,至少我对Windows套接字API的记忆就是这样.

对我而言,这::也意味着在IPv6的用语中具有相同的意义,因此侦听器[::]:49156将侦听49156所有IPv6网络适配器上的[::1]:1434端口1434,其中只有IPv6环回适配器上的端口.

它是否正确?

我假设IPv6侦听端点仅适用于IPv6适配器.也就是说,如果适配器只有一个IPv4地址,那么49156侦听器就不会收到与该端口的连接[::]:49156

另外,有人注意到MSDN文章GetActiveTcpListeners()错误地声明返回的对象"包括除了 Listen状态以外的所有TCP状态的侦听器."?

sockets ipv6

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

在Sparc 32位上处理值> 2 ^ 32的整数

我编写了一个小程序来测量循环所花费的时间(通过内联Sparc汇编代码片段).

一切都是正确的,直到我将迭代次数设置在大约4.0 + 9(高于2 ^ 32)之上.

这是代码片段:

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <math.h>
#include <stdint.h>

int main (int argc, char *argv[])
{
  // For indices
  int i;
  // Set the number of executions
  int nRunning = atoi(argv[1]);
  // Set the sums
  double avgSum = 0.0;
  double stdSum = 0.0;
  // Average of execution time
  double averageRuntime = 0.0;
  // Standard deviation of execution time
  double deviationRuntime = 0.0;

  // Init sum
  unsigned long long int sum = 0; …
Run Code Online (Sandbox Code Playgroud)

c assembly sparc long-integer

12
推荐指数
1
解决办法
307
查看次数

copy_to_user在linux内核版本4.12.8中未定义

在我的项目中,我使用char驱动程序在用户空间和内核空间之间进行通信.我使用该函数copy_to_user(void user *to, const void *from, unsigned long n)将数据从内核空间复制到用户空间缓冲区.我们可以在#include < asm/uaccess.h >头文件下找到这个函数.我使用Linux内核版本4.4.0-59-generic,Ubuntu OS版本16.04 LTS编译了该项目,并且其工作正常,没有任何错误和警告.我得到了所需的输出.

我使用Linux内核版本4.12.8,Ubuntu OS版本16.04.2 LTS编译了同一个项目,它在编译期间向我发出警告WARNING: "copy_to_user" [/home/ldrv1/Desktop/Vijay/code/build/uts.ko] undefined!.当我对我的模块进行insmod时,我得到如下错误insmod: ERROR: could not insert module uts.ko: Unknown symbol in module.我认为#include <asm/uaccess.h>4.12.8内核版本仍然支持头文件,否则我会遇到致命错误:编译时没有这样的文件或目录错误.我尝试使用apt-get install linux-headers-$(uname -r)命令更新linux内核头文件 ,我得到以下响应:

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-headers-4.12.8
E: Couldn't find any package by glob 'linux-headers-4.12.8'
E: Couldn't find any package by regex 'linux-headers-4.12.8' …
Run Code Online (Sandbox Code Playgroud)

linux linux-device-driver linux-kernel embedded-linux ubuntu-16.04

10
推荐指数
1
解决办法
8208
查看次数

如何屏蔽Python 3嵌套字典以返回仅包含特定项的新字典?

我正在使用API​​的几个端点,它返回的数据非常冗长.我想将这些数据的一部分提供给其他地方的另一段代码.

假设我有几个这样的字典(我计划循环并过滤):

asset = {
    'id': 1,
    'name': 'MY-PC',
    'owner': 'me',
    'location': 'New York City',
    'model': {
        'id': 1,
        'name': 'Surface',
        'manufacturer': {
            'id': 1,
            'name': 'Microsoft'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个将该字典带入的函数,以及一个"掩码",它将用于创建仅允许的项目的新字典.这可能是一个示例掩码(但是,我可以使用任何格式使得生成的代码最简洁):

mask = {
    'id': True,
    'name': True,
    'model': {
        'id': True,
        'name': True,
        'manufacturer': {
            'name': True
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后该函数应该返回:

mask = {
    'id': 1,
    'name': 'MY-PC',
    'model': {
        'id': 1,
        'name': 'Surface',
        'manufacturer': {
            'name': 'Microsoft'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Python 3中是否已经内置了有助于此的内容?看起来如果我必须手动执行此操作,它会很快变得非常难看.我发现itertools.compress,但这似乎是列表,不会处理字典的复杂性.

python dictionary iterator

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

Couchbase N1QL:如何使用SELECT获取包含ID和CAS的完整文档

我正在使用Couchbase 4.0 beta和java-client 2.1.3.

Bucket.get(id)收益JsonDocument从中我能得到id并且cas还有内容.现在我想使用查询二级索引N1QL (select *).但是,QueryResult只返回JsonObjects的行,它们只是文档内容.无论如何我还能获得元数据(idcas)吗?

couchbase sql++

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

如何解决Linux OS中的“解压缩:找不到或打开”错误

我试图在linux命令行上提取文件:

unzip myfile.zip
Run Code Online (Sandbox Code Playgroud)

但是发生此错误:

unzip: cannot find or open myfile.zip, myfile.zip.zip or myfile.zip.ZIP
Run Code Online (Sandbox Code Playgroud)

linux shell zip

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

确切地说,“-fno-semantic-interposition”与“-fvisibility=protected”有何不同?

来自https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Optimize-Options.html#index-fsemantic-interposition

- 语义插入

某些对象格式(例如 ELF)允许动态链接器插入符号。这意味着,对于从 DSO 导出的符号,编译器无法执行过程间传播、内联和其他优化,以应对相关函数或变量可能发生的变化。虽然此功能很有用,例如通过调试实现重写内存分配函数,但在代码质量方面代价高昂。使用 -fno-semantic-interposition ,编译器假设如果函数发生插入,则覆盖函数将具有完全相同的语义(和副作用)。类似地,如果变量发生插入,则变量的构造函数将是相同的。该标志对于显式声明为内联的函数(不允许插入来改变语义)和显式声明为弱的符号没有影响。

来自https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-visibility-function-attribute

受保护的

受保护的可见性类似于默认可见性,只不过它指示定义模块中的引用绑定到该模块中的定义。也就是说,声明的实体不能被另一个模块覆盖。

这听起来完全一样。

除了-fno-semantic-interposition更改显式标记default为 的任何函数之外,还有什么真正的区别吗protected

c c++ gcc elf

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

原子decref实现之间的区别

我一直在研究原子引用计数的实现。

大多数操作在库之间是非常一致的,但是我发现“减少引用计数”操作令人吃惊。(请注意,通常,共享和弱decref之间的唯一区别是on_zero()被调用。下面将说明异常。)

如果还有其他根据C11 / C ++ 11模型实现的实现(MSVC做了什么?),而不是“我们使用seq_cst,因为我们没有更好的了解”类型,请随时对其进行编辑。

大多数示例最初都是C ++,但是在这里,我将它们重写为C,内联并按照>= 1约定进行了规范化:

#include <stdatomic.h>
#include <stddef.h>
typedef struct RefPtr RefPtr;
struct RefPtr {
    _Atomic(size_t) refcount;
};
// calls the destructor and/or calls free
// on a shared_ptr, this also calls decref on the implicit weak_ptr
void on_zero(RefPtr *);
Run Code Online (Sandbox Code Playgroud)

Boost intrusive_ptr示例openssl

void decref_boost_intrusive_docs(RefPtr *p) {
    if (atomic_fetch_sub_explicit(&p->refcount, 1, memory_order_release) == 1) {
        atomic_thread_fence(memory_order_acquire);
        on_zero(p);
    }
}
Run Code Online (Sandbox Code Playgroud)

可以对fetch_sub操作使用memory_order_acq_rel,但是当引用计数器尚未达到零时,这会导致不必要的“获取”操作,并且可能会导致性能下降。

但大多数其他工具( Boostlibstdc ++libc ++ …

c c++ atomic reference-counting memory-model

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