我需要打开一个文件,并且我有一个&Path和一个i32用于标志。我可以使用 打开文件File::open(path),但这不允许我设置选项。文档说我应该使用OpenOptions,但我没有看到任何方法可以OpenOptions从我的i32. 我的标志的内容定义为open(2).
我使用的标志是526338,如果你想自己测试一下。
所以我只是在 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++ 测试程序,可以让 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 语言的新手,所以这可能是一个愚蠢的问题。
在我网上找到的实现中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,还是查看整个字符串?
我有以下一组代码无法找到我获得垃圾值的原因.我的意图是将字节数复制为目标而不管源是否为我的应用程序制作通用副本.但没有得到正确的结果.有没有办法实现这一目标.
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有助于了解这一概念的原因.
ISO:IEC 9899 标准化了 C 标准库函数的原型并描述了它们的行为。它指定标识符、返回类型和参数及其匹配的某个 C 标准函数的类型。
但是为什么它没有指定定义 - (具体功能实际上如何工作的核心)?
为什么 C 标准库函数 X 在 Linux 上的 gcc 编译器套件(GNU C 库)、macOS 上的 clang 套件和 Windows 上的 Microsoft Visual C++ 的核心系统动态库之间的实际源代码会有所不同?为什么它依赖于实现、操作系统和相关的编译器设计?
编辑:我知道这个问题乍一看对你们大多数人来说似乎很糟糕,但它绝对有权得到回答,因为我还不知道原因。
我不建议 ISO 对定义进行标准化,因为该问题是基于意见而结束的——不要误会我的意思。我只是问为什么事情会这样,并想从您的知识和经验中学习。
我在Stevens在 Unix 环境中的高级编程中做练习时遇到了这个问题:
perror是用 ISO C 属性定义的const,而整数参数 tostrerror不是用这个属性定义的。为什么?perror用const属性定义的函数是因为我们通常向它传递一个文字字符串吗?
void perror(const char *s);
char *strerror(int errnum);
Run Code Online (Sandbox Code Playgroud) 标准库(C 或 C++)实现是否存在任何技术原因(IMO 滥用),强调它们的做法(= 用两个下划线作为所有内容的前缀 + 添加尾部下划线以表示变量是成员变量)?
我明白了/.*__.*/并且 /_[A-Z].*/(<= regexes) 是由实现保留的。但这不是应该指编译器的实现而不是(标准)库吗?
标准库在选择内部名称方面不能像其他库一样吗?
已知的fgets libc函数实现fgetc()在里面使用,如何使用read()更大的缓冲区或其他方法代替加速函数?
例如,我读取/proc/pid/maps文件来搜索一些字符串.该文件的格式是已知的,目前我使用fgets链接中的实现read(fd, &c, 1);代替getc.我认为从文件读取单字节比读取200字节慢.所以我想修改函数从文件读取N个字节,然后找到换行符.我认为替换1字节读取可以以某种方式加速该功能.
我最近注意到一个隐藏的进程它没有出现在进程列表中,但是它消耗了cpu时间和内存.这会发生这种情况,它是如何编写的,它的工作是什么,我们如何杀死这个进程.
Is There any way to unhide such process which are hidden