标签: libc

posix regcomp和regexec线程是否安全?具体来说,在GNU libc上?

这里有两个独立的问题:我可以在没有锁定的情况下在多线程程序中使用正则表达式,如果是这样,我可以在多个线程中同时使用相同的regex_t吗?我无法在Google或联机帮助页上找到答案.

c regex posix pthreads libc

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

术语"libc"是否等同于"C标准库"?

我有时会听到人们互换使用术语"libc"和"C标准库".我理解"libc"是许多流行的C标准库实现的名称(或名称的一部分).我的猜测是,由于这些实现的广泛使用,人们开始将C标准库称为"libc",尽管它不是官方名称.

将C标准库称为"libc"是否正确?

c terminology libc standard-library

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

我刚刚在我的机器上销毁了libc.so.我现在能做什么?

当我运行以下命令时,我以root用户身份登录到远程框:

ln -sf /nonexistent /.../libc.so
Run Code Online (Sandbox Code Playgroud)

我的提示立即开始抛出错误:

basename: could not find shared library
Run Code Online (Sandbox Code Playgroud)

我甚至无法运行任何东西:

root@toastbox# ls
ls: could not find shared library
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我有两个用Bash打开的SSH会话,但没有其他进程可访问.我在本地计算机上有一个针对目标的交叉编译器,但是SCP文件无法再远程到远程端.

编辑:此框中没有其他libc副本; 我覆盖了真正的libc文件.有些事情仍然有效:我可以echo,我可以使用制表完成来模拟ls.但正常的程序(mv,rm等)是MIA.

libc

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

为什么fopen参数限制在C标准和<stdio.h>头文件中限定?

标准库函数fopen声明<stdio.h>为:

FILE *fopen(const char * restrict filename, const char * restrict mode);
Run Code Online (Sandbox Code Playgroud)

这也是函数原型在C标准中的出现方式.

为什么论证restrict合格?

c libc language-lawyer

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

stdarg.h在哪里?

在我的系统上(Mac OS 10.6)/usr/include/stdarg.h是:

/* This file is public domain.  */
/* GCC uses its own copy of this header */
#if defined(__GNUC__)
#include_next <stdarg.h>
#elif defined(__MWERKS__)
#include "mw_stdarg.h"
#else
#error "This header only supports __MWERKS__."
#endif
Run Code Online (Sandbox Code Playgroud)

那么,如果GCC使用自己的stdarg.h副本,它在哪里呢?我不知道这#include_next意味着什么(可能是GCC扩展?),也不知道"MWERKS"(编译器?).

c macos gcc freebsd libc

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

Android静态链接与针对glibc的动态链接

我一直在将一些Linux工具(以及我自己的一些C代码)交叉编译到Android,我面临的挑战之一就是Android的libc有一些缺失/剥离的组件,我最终修补了我的代码以使其能够与Android的libc(例如像http://credentiality2.blogspot.com/2010/08/compile-ncurses-for-android.html这样的问题)

Q1:在使用arm工具链(或ndk-build)进行交叉编译时,如何静态链接glibc(以及其他依赖项)?

Q2:对于Android的二进制文件静态链接glibc是一个好主意吗?如果我开始静态链接,我是否应该期待任何事情?有任何性能/内存问题吗?

我理解静态与动态链接的大部分优缺点 - C++应用程序 - 我应该为库使用静态或动态链接吗?静态链接与动态链接

因此,我希望知道在交叉编译二进制文件时是否应该静态链接glibc for Android.

android libc dynamic-linking static-linking android-ndk

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

适用于C标准库的全面开源测试套件

我正在寻找一个C标准库测试套件(主要用于不接触"外面的世界"的算法,因此strcpy(),memcmp(),itoa()和喜欢).

我尝试下载GCC源代码,但它们非常大,我很难找到任何我可以在那里重用的内容......

(很明显,问题是关于ANSI C标准库,而不是POSIX或者其他.另外,我希望测试相当便携.)

c open-source unit-testing libc standard-library

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

FILE何时刷新?

我在Windows下有一个很好的旧C FILE文件描述符,输出流使用它来写入数据.我的问题很简单,但我找不到答案:

假设我不调用fflush,内容何时被刷新到光盘?

流不断接收数据,似乎内容经常被刷新,但刷新它的规则是什么?

c c++ windows libc fflush

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

添加服务到名称服务开关

所以我正在尝试向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
查看次数

为什么stdio中的某些函数将流作为最后一个参数?

stdio中的一些函数似乎将流作为最后一个参数,例如:

char    *fgets(char *restrict, int, FILE *restrict);
int      fputs(const char *restrict, FILE *restrict);
size_t   fread(void *restrict, size_t, size_t, FILE *restrict);
size_t   fwrite(const void *restrict, size_t, size_t, FILE *restrict);
Run Code Online (Sandbox Code Playgroud)

有些人将它作为第一个论点:

int      fgetpos(FILE *restrict, fpos_t *restrict);
int      fseek(FILE *, long, int);
Run Code Online (Sandbox Code Playgroud)

为什么这种不一致?这些功能是在标准库演变的不同时间添加的吗?在那种情况下,这是第一次,为什么公约改变了?

我意识到,由于省略号(并且类似于首先和最后),fprintf与朋友一起或多或少地需要FILE*第一个(或至少早期fclose).

c libc

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