小编Huc*_*kle的帖子

查找返回的mysql结果中的行数(nodejs)

当felixge的mysql用于node.js时,如何向结果对象询问返回的行数?我有一个相当昂贵的查询,所以我不想运行COUNT(*)第一次,只是再次运行查询.

mysql node.js

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

我可以检查两个FILE*或文件描述符号是否指向同一个文件?

我有一个程序从文件读取并写入文件.我想阻止用户为两者指定相同的文件(出于显而易见的原因).让我们说第一条路径在char* path1,第二条路径在char* path2.我可以fopen()两个路径,fileno()每个呼叫,并得到相同的号码?

为了更清楚地解释:

char* path1 = "/asdf"
char* path2 = "/asdf"

FILE* f1 = fopen(path1, "r");
FILE* f2 = fopen(path2, "w");

int fd1 = fileno(f1);
int fd2 = fileno(f2);

if(fd1 == fd2) {
  printf("These are the same file, you really shouldn't do this\n");
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我不想比较文件名,因为人们很容易通过类似路径/asdf/./asdf或使用符号链接来破坏它们.最终,我不想将我的输出写入我正在阅读的文件中(可能会导致严重的问题).

c

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

未定义引用`_GetAdaptersAddresses @ 20' - 但我包括-liphlpapi

我正在使用gccunder cygwin编写一些代码,这些代码在我的代码中调用GetAdaptersAddresses,iphlpapi.h我已经设置了_WIN32_WINNT上面所需的代码,0x0501并且在我添加的链接器行上-liphlpapi但链接器仍然失败并显示以下消息:

gcc -liphlpapi build/obj/*.o -Wall -Wextra -o build/bin/asdf.exe src/asdf.cpp
/tmp/ccdjLPVY.o:asdf.cpp:(.text+0x153): undefined reference to `_GetAdaptersAddresses@20'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

一些片段来自asdf.cpp:

#if _WIN32_WINNT < 0x0501
  #warning _WIN32_WINNT was set lower than 0x0501, fixing
  #undef _WIN32_WINNT
  #define _WIN32_WINNT 0x0501
#endif
#include <winsock2.h>
#include <iphlpapi.h>
Run Code Online (Sandbox Code Playgroud)

我知道他们在那里蠢蠢欲动:

strings /usr/i686-pc-mingw32/sys-root/mingw/lib/libiphlpapi.a  | sort | uniq | grep GetAdapters
__imp__GetAdaptersAddresses@20
__imp__GetAdaptersInfo@8
_GetAdaptersAddresses@20
_GetAdaptersInfo@8
GetAdaptersAddresses
GetAdaptersInfo

$strings /usr/lib/w32api/libiphlpapi.a  | sort | …
Run Code Online (Sandbox Code Playgroud)

c c++ winapi gcc cygwin

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

PKCS#11中的内存所有权C_FindObjects其中ulMaxObjectCount!= 1

当API返回可变长度的项列表时,PKCS#11 v2.40的作者使用通用模式.在诸如C_GetSlotList和的API中C_GetMechanismList,应用程序应该两次调用API.在第一次调用中,指向a的指针CK_ULONG设置为下次调用时将返回的项目数.这允许应用程序分配足够的内存并再次调用API以检索结果.

C_FindObjects调用还返回可变数量的项,但它使用不同的范例.该参数CK_OBJECT_HANDLE_PTR phObject设置为结果列表的头部.该参数CK_ULONG_PTR pulObjectCount设置为返回的项目数,确保小于CK_ULONG ulMaxObjectCount.

该标准没有明确说明phObject必须是一个有效的指针,指向足够容纳ulMaxObjectCount CK_OBJECT_HANDLEs 的内存块.

可以将标准解释为应用程序必须悲观地为ulMaxObjectCount对象分配足够的内存.或者,可以将标准解释为PKCS#11实现将分配pulObjectCount CK_OBJECT_HANDLEs,然后应用程序负责释放该内存.然而,后来的解释似乎是可疑的,因为标准中没有其他地方PKCS#11的实现曾经分配内存.

该段落是:

C_FindObjects continues a search for token and session objects that 
match a template, obtaining additional object handles. hSession is 
the session’s handle; phObject points to the location that receives 
the list (array) of additional object handles; ulMaxObjectCount is 
the maximum number of object handles to be …
Run Code Online (Sandbox Code Playgroud)

cryptography pkcs#11

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

在多个文件中重用C宏

我有几个常用的宏,几乎每个我写的C文件都需要这些宏.目前我正在将它们复制到我需要的每个文件中.这可能是一个坏主意,因为我最终需要更改其中一个,然后我最终会在文件之间定义不一致的宏.

有没有办法基本上为宏创建头文件?我试图在其中包含所有宏的标题并包含它,但我仍然收到编译器警告.

更新:我得到的具体警告是第二个例子中V4等函数的隐式声明.

一个例子:

//file1.c
#define COMMON_NUMBER 1

//file2.c
#define COMMON_NUMBER 1

//...

//fileN.c
#define COMMON_NUMBER 1

//Oh wait, it should have been 2 all along..... *facepalm*
Run Code Online (Sandbox Code Playgroud)

一个更好的例子:

//file1.c
#include "usefulmacros.h"

char* prog;
int optv;

int main(){
  prog = strdup(argv[0]);    
  optv = 4;           // This would be parsed from # of "-v" in argv[]
  return 0;
}

void functionA(){
  int dumberror = 1;
  V4("This is a fairly verbose error: %d",dumberror);
}

//file2.c
#include "usefulemacros.h"
extern char* prog;
extern int   optv; …
Run Code Online (Sandbox Code Playgroud)

c macros c-preprocessor

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

(可选)使用String.split(),在分隔符的最后一次出现处拆分一个字符串

我有一个匹配这个正则表达式的字符串:^.+:[0-9]+(\.[0-9]+)*/[0-9]+$可以很容易地将其视为(Text):(Double)/(Int).我需要将这个字符串拆分为三个部分.通常这很容易,除了(Text)可能包含冒号,所以我不能分裂任何冒号 - 而是最后一个冒号.

.*是贪婪的,所以它已经做了一个相当干净的工作,但这不作为String.split()的正则表达式工作,因为它将吃掉我(Text)作为分隔符的一部分.理想情况下,我想要一些能够返回带有三个字符串的String []的东西.我没有使用String.split()就可以100%罚款.

java regex string split tokenize

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

使用定界符作为 shell 的输入时,为什么 stdin 会关闭

我对此有点困惑

$ bash <<EOF
  read -p 'This will not work' input
EOF
Run Code Online (Sandbox Code Playgroud)

因为

$ cat script
read -p 'This will work fine' input
$ bash script
This will work fine
Run Code Online (Sandbox Code Playgroud)

有什么不同?这似乎是一种标准行为,因为ash行为方式完全相同。


根据迄今为止提供的答案,我怀疑(然后确认)以下方法有效。我认为这实际上是我一直想做的事情,但<()我总是忘记语法的存在。

$ bash <( cat <<EOF
  read -p 'This works' input
EOF
)
Run Code Online (Sandbox Code Playgroud)

shell heredoc

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

CMake-使用POSIX功能测试宏吗?

CMake作为一组方便的属性,与在基础编译器中设置某些功能测试宏相对应。例如,使用gcc

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
Run Code Online (Sandbox Code Playgroud)

将导致传递以下标志:

-std=c11 -Wpedantic
Run Code Online (Sandbox Code Playgroud)

这还将设置功能测试宏

_ISOC11_SOURCE
Run Code Online (Sandbox Code Playgroud)

因为我可以依靠CMake处理编译器之间的差异,所以效果很好。但是,我正在查看CMakes支持的功能测试宏的列表,但是找不到与_POSIX_C_SOURCE功能测试相关的任何宏。除此以外,还有其他更好的方法add_definitions(-D_POSIX_C_SOURCE=200809L)吗?

c language-features posix cmake

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

为什么 js_sys Promise::new 需要 FnMut?

js_sysPromise通过函数公开 JavaScript pub fn new(cb: &mut dyn FnMut(Function, Function)) -> Promise;。根据我对MDN 文档的阅读,没有任何内容表明执行器函数将被多次调用,但js_sys将其公开FnMutFnOnce.

因此,我无法专注于简单的任务,例如将来通过通道向自己发送消息。理想情况下,sender通道的一半将被移入封闭件中并Promise::new接受FnOnce.

async func send_to_future_self() {
  use std::sync::mpsc::{Sender, Receiver, channel};
  let (sender, receiver) = channel().split();

  // Schedule sending a message in the future

  // Option A: Move `sender` --> The closure becomes `FnOnce` because it consumes `sender`
  // Option B: Reference `sender` --> Then the borrow outlives `sender`'s lifetime

  let mut sleep_100 …
Run Code Online (Sandbox Code Playgroud)

future promise rust webassembly wasm-bindgen

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

SA_RESTART未在Linux下定义,在Solaris中编译良好

免责声明:这是一个编程类,但它不是作业的答案或目的.

我们可以在我的大学访问多个类似*nix的服务器,并鼓励我们在每个服务器上编译我们的项目,以了解不同环境如何改变事物.我目前正在做一个涉及信号的项目,而且我遇到了一些我无法解决的问题.

在基于Solaris的服务器下,一切正常:

xxxxxxx@xxx:~/proj6$ make gcc-new
rm -f ./pr6
gcc -std=c99 -Wall -Wextra -D_POSIX_C_SOURCE=200112L -D_POSIX_PTHREAD_SEMANTICS -o pr6 pr6.2.c pr6_ctime.c pr6_signal.c
 pr6_signal.c:64: warning: unused parameter 'sig'
 pr6_signal.c:64: warning: unused parameter 'func'
Run Code Online (Sandbox Code Playgroud)

在基于Linux的服务器下,我看到:

xxxxxxx@xxxxx:~/proj6$ make gcc-new
rm -f ./pr6
gcc -std=c99 -Wall -Wextra -D_POSIX_C_SOURCE=200112L -D_POSIX_PTHREAD_SEMANTICS  -o pr6  pr6.2.c pr6_ctime.c pr6_signal.c
pr6_signal.c: In function âinstall_signal_handlerâ:
pr6_signal.c:45: error: âSA_RESTARTâ undeclared (first use in this function)
pr6_signal.c:45: error: (Each undeclared identifier is reported only once
pr6_signal.c:45: error: for each function it appears …
Run Code Online (Sandbox Code Playgroud)

linux signals solaris c99

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

函数如pipe(3)但返回FILE*

是否有一个函数,int pipe(int pipefd[2])但返回FILE指针?我知道我可以FILE * fdopen(int)既文件描述符,我知道我,当我int fclose(FILE *)FILE三分球,将关闭底层的文件描述符,所以我并不需要对其进行跟踪,但只希望是很好的与任何文件描述符完全贴或FILE指针.

int fpipe(FILE * pipes[2]) {
  int result; 
  int pipefd[2];
  FILE * pipe[2];

  if (0 != (result = pipe(pipefd))) {
    return result;
  }

  if (NULL == (pipe[0] = fdopen(pipefd[0], "r"))) {
    close(pipefd[0]);
    close(pipefd[1]);
    return errno;
  }

  if (NULL == (pipe[1] = fdopen(pipefd[1], "w"))) {
    fclose(pipe[0]);
    close(pipefd[1]);
    return errno;
  }

  pipes[1] = pipe[1];
  pipes[0] = pipe[0];
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c posix

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

良好的详细程度宏(C99)

我想写一些我想象的是一个相当常见的宏.我想通过定义以下形式的一堆宏来模拟许多POSIX程序上重复的"-v"选项:

#define V1(str, ...) if(optv >= 1){printf("%s: "str,prog,__VA_ARGS__);}

int main(int argc, char* argv[])
{
  // ... stuff ...
  int i = 1;
  V1("This contains a variable: %d\n",i);
}

// Output:
// ./program: This contains a variable: 1
Run Code Online (Sandbox Code Playgroud)

其中,optv计算命令行中找到的"-v"选项的数量,并prog包含程序名称(均未显示).这很好用,但问题是我必须使用变量.V1("Output")将生成编译器错误.我总是可以使用,V1("Output%s","")但应该有一个更清洁的解决方案.

c macros verbosity

0
推荐指数
1
解决办法
1693
查看次数