标签: gnu

使用GNU日期计算日期

使用GNU date命令行实用程序,我知道:

  • 如何从任何给定日期减去3天:
    date -d "20110405 -3 days" "+%Y%m%d"
    20110402

  • 如何从今天开始的最后一个星期五:
    date -d "last friday" "+%Y%m%d"
    20110408

但我不知道如何从任何给定日期获得上周五:只
date -d "20110405 last friday" "+%Y%m%d"
返回给定日期:
20110405

关于如何做到这一点的任何想法?如果不能使用单行,那么几行脚本也会有所帮助.

bash gnu date

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

如何添加LDFLAGS的路径

我正在尝试建立一个名为PBC的库(基于配对的加密技术).这个库需要另一个名为GMP的库- (GNU多精度库).

我的问题是在正确安装GMP后,PBC给出了以下错误:

未找到gmp库将其路径添加到LDFLAGS

我不知道是什么LDFLAGS以及如何将它添加到路径中.

PS:我正在使用MinGW.

gnu gmp mingw32

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

Linux:阻塞直到字符串在文件中匹配("tail + grep with blocking")

在bash/GNU工具中是否有一些单行方式阻塞,直到文件中有匹配的字符串?理想情况下,超时.我想避免多行循环.

更新:似乎我应该强调我希望在字符串匹配时结束进程.

linux grep gnu block

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

获取在iOS 6.x上运行的GNU C编译器

我有一个越狱(evasi0n)第4代iPad,带有iOS 6.1固件.

通过Cydia,我安装了移动终端,版本520-2.
然后,按照教程,我下载并安装了CSU,Link Identify Editor,LibGCC,GCC和Headers/Libraries.

在安装过程中没有任何问题.

本教程和项目分别更新到2012年2月15日和2012年2月18日,因此它们可以正常运行到iOS 5.x(我已经在我的iPhone 4S,iOS 5.1.1上测试了这个程序,它可以工作,所以我可以在设备上编译和执行C代码)

但在我输入的iPad(iOS 6.1)移动终端上

$ gcc

我明白了

非法指导:4

在这些日子里我搜索了很多,但我在iOS 6.x上找不到关于GCC的任何信息,因为最近一次关于它的讨论在2012年10月12日更新,而evasi0n越狱程序已经从2月4日开始, 2013.

谢谢你的帮助.

UPDATE

似乎(从答案中)问题与iOS 6.x固件无关,而是与iPhone 5和iPad第4代的A6/A6X芯片无关.

compiler-construction terminal gnu jailbreak ios6

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

如何在编译时静态比较两个字符串

我想创建一个可以比较2个字符串的宏,如果不满足条件则发出编译时错误.这可能是编译时断言.

我不知道怎么能这样做.

例如:

STATIC_COMPARE("THIS STRING","THIS STRING") -> would emit a compile time error
STATIC_COMPARE("THIS STRING","THIS OTHER STRING) -> wouldn't emit a compile time error.
Run Code Online (Sandbox Code Playgroud)

宏会看起来像

#define STATIC_COMPARE(str1,str2) if (str1==str2) emit an error with a message
Run Code Online (Sandbox Code Playgroud)

所以我想问题归结为能够在编译时比较2个字符串.

c++ macros xcode gnu compiler-errors

11
推荐指数
3
解决办法
4687
查看次数

weak_alias函数做了什么以及它定义在何处

所以我正在查看gcc编译器的来源,我在fork.c中看到了这个:

int
__fork ()
{
  __set_errno (ENOSYS);
  return -1;
}
libc_hidden_def (__fork)
stub_warning (fork)

weak_alias (__fork, fork)
#include <stub-tag.h>
Run Code Online (Sandbox Code Playgroud)

我想弄清楚weak_alias的作用.我在glibc源文件中使用了grep命令来查找所有出现的#define weak_alias:

grep -r "#define weak_alias"
Run Code Online (Sandbox Code Playgroud)

我发现很多次出现的宏:

#define weak_alias(n, a)
Run Code Online (Sandbox Code Playgroud)

但宏并没有真正解释任何事情.他们只是定义了这个陈述,但没有说明它是如何被替换的.例如,一个出现在profil.c中:

/* Turn off the attempt to generate ld aliasing records. */
#undef weak_alias
#define weak_alias(a,b)
Run Code Online (Sandbox Code Playgroud)

那么有什么想法,weak_alias做什么以及它在哪里定义?

提前致谢

c linux compiler-construction gcc gnu

11
推荐指数
2
解决办法
6881
查看次数

如何调用使用define创建的GNU make宏?

在我的Makefile中调用GREP的两种方式有什么不同吗?任何理由我应该使用其中一个?两者似乎都产生了相同的结果.

define GREP
$(word 3,$(shell echo "#define  FOO     0xfff00100"))
endef

all:
        @echo $(GREP)
        @echo $(call GREP)
Run Code Online (Sandbox Code Playgroud)

macros gnu makefile

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

如何使用Unix连接获取外连接中的所有字段?

假设我有两个文件,en.csv并且sp.csv,每个都包含正好两个逗号分隔的记录:

en.csv:

1,dog,red,car
3,cat,white,boat
Run Code Online (Sandbox Code Playgroud)

sp.csv:

2,conejo,gris,tren
3,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

如果我执行

join -t, -a 1 -a 2 -e MISSING en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

1,dog,red,car
2,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

请注意,所有缺少的字段都已折叠.要获得"正确的"全外连接,我需要指定一种格式; 从而

join -t, -a 1 -a 2 -e MISSING -o 0,1.2,1.3,1.4,2.2,2.3,2.4 en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

产量

1,dog,red,car,MISSING,MISSING,MISSING
2,MISSING,MISSING,MISSING,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

这种方式产生完全外连接的一个缺点是一个需要明确指定了决赛桌,这可能不容易编程的应用(如连接表的身份只有在运行时是已知的)做的格式.

最近版本的GNU join通过支持特殊格式消除了这个缺点auto.因此,join上面的最后一个命令的这种版本可以被更普遍的替换

join -t, -a 1 -a 2 -e MISSING -o auto en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

如何join在不支持该-o auto选项的版本中实现同样的效果?


背景和细节

我有一个Unix shell(zsh)脚本,用于处理多个CSV平面文件,并通过广泛使用GNU join的'-o auto'选项来实现.我需要修改这个脚本,以便它可以在可用 …

unix shell join gnu gnu-coreutils

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

添加服务到名称服务开关

所以我正在尝试向NSS(名称服务交换机)添加服务.请注意GNU指南,了解如何在此处执行此操作.我一直在关注那个指南.我需要实现一个与passwd数据库一起使用的服务.

我遇到的问题是我的模块没有被调用某些功能.让我在这里重现一些代码......

enum nss_status
_nss_myservice_setpwent (void) {
 printf( "@ %s\n", __FUNCTION__ ) ;
 return NSS_STATUS_SUCCESS ;
} ;

enum nss_status
_nss_myservice_endpwent (void) {
 printf( "@ %s\n", __FUNCTION__ ) ;
 return NSS_STATUS_SUCCESS ;
} ;

enum nss_status
_nss_myservice_getpwent_r (struct passwd *result, char *buffer,
   size_t buflen, int *errnop) {

 static int i = 0 ;

 if( i++ == 0 ) {
   printf( "@ %s\n", __FUNCTION__ ) ;
   return init_result( result, buffer, buflen, errnop ) ;
 } else { …
Run Code Online (Sandbox Code Playgroud)

c gnu nss passwd libc

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

memmem是GNU扩展的特殊原因吗?

在C中,该memmem函数用于定位存储区中的特定字节序列.它可以被同化strstr,专用于以null结尾的字符串.

是否有任何特殊原因使此函数可用作GNU扩展,而不是直接在标准库中?手册说明:

这个功能在Linux库中被破坏,包括libc 5.0.9; 在那里,针和干草堆参数被互换,并且返回了第一次出现针的末尾的指针.

旧的和新的libc都有错误,如果针是空的,则返回haystack-1(而不是haystack).并且glibc 2.0使情况变得更糟,返回指向haystack的最后一个字节的指针.这在glibc 2.1中得到修复.

我可以看到它经历了几次修复,但我想知道为什么它不像strstr某些发行版那样直接可用(如果不是更多).它是否仍然会带来实施问题?

编辑:动机.如果标准反过来决定它,我不会问这个问题:包括memmem但不是strstr.确实,strstr可能是这样的:

memmem(str, strlen(str), "search", 6);
Run Code Online (Sandbox Code Playgroud)

考虑到在C函数中通常需要数据块和它的长度,但是稍微复杂但仍然是一个非常合乎逻辑的单行.

编辑(2):评论和答案的另一个动机.引用Theolodis:

并非每个函数都是必需的,或者至少是大多数C开发人员,因此它实际上会使标准库变得不必要的巨大.

嗯,我完全同意,在使图书馆更轻,更快的时候,我总是在这里.但那么......为什么两者strncpymemcpy(来自凯尔塔尔的评论)......?我几乎可以问:为什么穷人memmem被"黑色"?

c memory gnu

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