标签: libc

如何打开带有与 C 打开函数匹配的 i32 提供的标志的文件?

我需要打开一个文件,并且我有一个&Path和一个i32用于标志。我可以使用 打开文件File::open(path),但这不允许我设置选项。文档说我应该使用OpenOptions,但我没有看到任何方法可以OpenOptions从我的i32. 我的标志的内容定义为open(2).

我使用的标志是526338,如果你想自己测试一下。

libc rust

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

为什么 Rust 中的 C strlen() 也会计算 print 中的字符串切片!`s` 变量之后的宏?

所以我只是在 Rust 中修改 C 库,我发现以下代码:

extern crate libc;
use libc::{c_char, c_int, size_t};


extern "C" {

    fn printf(fmt: *const c_char, ...) -> c_int;
    
    fn strlen(arr: *const c_char) -> size_t;
}

fn main() {
    unsafe {
        printf("This uses C's standard lib printf".as_ptr() as *const i8);
        print!("\n");
        let s = "Useless thing again";
        print!("Length of {}: ", s);
        let x = strlen(s.as_ptr() as *const i8);
        print!("{}", &x);
    }
}
Run Code Online (Sandbox Code Playgroud)

将产生这个:

This uses C's standard lib printf

Length of Useless thing again: 31  
Run Code Online (Sandbox Code Playgroud)

strlen() …

c libc strlen rust

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

glibc 和 POSIX 到底是什么?

我真的很困惑。请看下面的图片: 在此输入图像描述 我发现linux中有一个名为glibc的库,当我们执行c/c++程序时,我们使用它的函数并调用适当的系统调用。事实上它是我们可以使用的API。但我很困惑。glibc 是否放入我们用于 c/c++ 程序的操作系统中?因此,当我们编写 python/ruby/... 程序时,没有标准库或 API(例如 glibc)可供我们调用其函数,并且它会调用适当的系统调用。那么我们在 python/ruby/... 中的代码如何运行呢?另外,什么是 POSIX?我读了维基百科,但我无法理解。它与 glibc 有何关系?请给我一些我能找到的例子和简单的解释

api operating-system posix glibc libc

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

使用 --call-stack fp 进行性能记录无法展开主函数

我有一个 C++ 测试程序,可以让 CPU 保持忙碌:

\n
#include <cstdint>\n#include <iostream>\n\n// Linear-feedback shift register\nuint64_t lfsr1(uint64_t max_ix)\n{\n    uint64_t start_state = 0xACE1u;  /* Any nonzero start state will work. */\n    uint64_t lfsr = start_state;\n    uint64_t bit;                    /* Must be 16-bit to allow bit<<15 later in the code */\n\n    for (uint64_t ix = 0; ix < max_ix; ++ix)\n    {   /* taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 */\n        bit = ((lfsr >> 0) ^ (lfsr >> …
Run Code Online (Sandbox Code Playgroud)

c++ glibc libc stack-unwinding perf

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

malloc 中的分配大小为零会导致内存位置冲突吗?

所以从问题的解释来看malloc(0)。我发现返回非空值时分配的内存块大小为零的概念是违反直觉的。(从这里结束)

\n

由于两个 malloc 地址不能相同,因此返回的分配应该至少占用一个字节,以保证未来调用的返回值不会mallocmalloc(0)当前进程生命周期中的任何地址发生冲突。

\n

或者,这意味着两个 malloc\xe2\x80\x94(其中一个为 0,另一个没有 \xe2\x80\x94)将在这种情况下返回相同的基地址,这是冲突的,因为两个不同大小的内存位置是不可能的。

\n

c malloc libc

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

向libc添加新功能

如何添加新的libc函数并从C程序中调用它?新函数不是任何内核级系统调用的包装器.它的功能将在用户空间完成.

c libc

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

关于C中memmove实现的问题

我是 C 语言的新手,所以这可能是一个愚蠢的问题。

在我网上找到的实现中memmove,代码执行以下操作:

void *memmove(void *dest, const void *src, size_t len) {
  char *d = dest;
  const char *s = src;
  if(d < s) {
    while(len--)
      *d++ = *s++;
  } else {
    ...
  }
  return dest;
}
Run Code Online (Sandbox Code Playgroud)

比较字符串dands<运算符有什么作用?根据我的理解,当你比较 C 中的两个字符串时,你倾向于使用类似strcmp(). 它只是比较dand的第一个字符s,还是查看整个字符串?

c libc memmove

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

memset无法正常工作

我有以下一组代码无法找到我获得垃圾值的原因.我的意图是将字节数复制为目标而不管源是否为我的应用程序制作通用副本.但没有得到正确的结果.有没有办法实现这一目标.

int main()
{
    char x[6];
    char *i="pra";
    memset(&x,0,6); //Doing memset

    memcpy(&x,i,6);
    printf("%x %x %x %x %x %x",x[0],x[1],x[2],x[3],x[4],x[5]);
}

o/p:
70 72 61 0 25 78
Run Code Online (Sandbox Code Playgroud)

我们可以看到0之后的输出是垃圾.但是为什么它正在进行以及它的来源.乳清memset不能正常工作.Pleae有助于了解这一概念的原因.

c linux libc memcpy

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

为什么 ISO/IEC 9899 没有标准化 C 标准库中函数的定义?

ISO:IEC 9899 标准化了 C 标准库函数的原型并描述了它们的行为。它指定标识符、返回类型和参数及其匹配的某个 C 标准函数的类型。

但是为什么它没有指定定义 - (具体功能实际上如何工作的核心)?

为什么 C 标准库函数 X 在 Linux 上的 gcc 编译器套件(GNU C 库)、macOS 上的 clang 套件和 Windows 上的 Microsoft Visual C++ 的核心系统动态库之间的实际源代码会有所不同?为什么它依赖于实现、操作系统和相关的编译器设计?


编辑:我知道这个问题乍一看对你们大多数人来说似乎很糟糕,但它绝对有权得到回答,因为我还不知道原因。

我不建议 ISO 对定义进行标准化,因为该问题是基于意见而结束的——不要误会我的意思。我只是问为什么事情会这样,并想从您的知识和经验中学习。

c iso function libc language-lawyer

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

为什么 perror 的参数使用 ISO C 属性 const 定义?

我在Stevens在 Unix 环境中的高级编程中做练习时遇到了这个问题:

  • to 的参数perror是用 ISO C 属性定义的const,而整数参数 tostrerror不是用这个属性定义的。为什么?

perrorconst属性定义的函数是因为我们通常向它传递一个文字字符串吗?

void perror(const char *s);

char *strerror(int errnum);
Run Code Online (Sandbox Code Playgroud)

c unix linux libc

-2
推荐指数
1
解决办法
678
查看次数

标准库实现中四个双下划线的原因

标准库(C 或 C++)实现是否存在任何技术原因(IMO 滥用),强调它们的做法(= 用两个下划线作为所有内容的前缀 + 添加尾部下划线以表示变量是成员变量)?

我明白了/.*__.*/并且 /_[A-Z].*/(<= regexes) 是由实现保留的。但这不是应该指编译器的实现而不是(标准)库吗?

标准库在选择内部名称方面不能像其他库一样吗?

c c++ libc libc++

-2
推荐指数
1
解决办法
157
查看次数

在C中实现最快的fgets

已知的fgets libc函数实现fgetc()在里面使用,如何使用read()更大的缓冲区或其他方法代替加速函数?

例如,我读取/proc/pid/maps文件来搜索一些字符串.该文件的格式是已知的,目前我使用fgets链接中的实现read(fd, &c, 1);代替getc.我认为从文件读取单字节比读取200字节慢.所以我想修改函数从文件读取N个字节,然后找到换行符.我认为替换1字节读取可以以某种方式加速该功能.

c performance implementation libc fgets

-2
推荐指数
1
解决办法
514
查看次数

注意到linux中的进程没有在进程列表中显示如何发生?

我最近注意到一个隐藏的进程它没有出现在进程列表中,但是它消耗了cpu时间和内存.这会发生这种情况,它是如何编写的,它的工作是什么,我们如何杀死这个进程.

Is There any way to unhide such process which are hidden

c unix linux libc

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