- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试插入最初从 stdin
读取的 fscanf
函数,例如 fscanf(stdin,"%ms", &secret)
。在我的插入函数中,我试图让它从我用字符串创建的输入文件中读取。以下是我正在做的:
int fscanf(FILE *stream, const char *format, ...){
FILE * in ;
char * buffer = "secretString";
size_t length = strlen(buffer);
in = fmemopen(buffer, length, "r");
if (in== NULL){
handle_error("fmemopen");}
// This is the part where I'm trying to feed my file as stdin
// since original fscanf expects stdin which I'm trying to hack
int dptr = fileno(in);
dup2(dptr, 0);
va_list args;
va_start(args, format);
int p = vfscanf(in, format, args);
va_end(ap);
fclose(in);
return p;
}
但是,我遇到了 Bad file descriptor
错误。如果有人能告诉我我做错了什么,我将不胜感激。
最佳答案
我不清楚您是从哪里想到应该像这样尝试替换 stdin 的文件描述符的。它不能那样工作,因为 fmemopen
的全部意义在于它背后没有底层文件(因此没有文件描述符);它只是将内存缓冲区改编为 stdio API。
幸运的是,我认为您没有理由需要或想要重新映射文件描述符来执行您想要的操作。如果您拦截 fscanf
并使用不同的 FILE*
参数重新调用 vfscanf
,stdin
不会得到使用,因此对其进行任何更改都不会产生任何影响。
关于c - 尝试将 fmemopen 文件描述符与 stdin 相关联时出现错误的文件描述符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52453248/
我正在尝试使用 fmemopen 函数将可执行文件的 char* 映射到内存中,该函数应该返回一个 FILE * 以便能够使用它(根本无需将其写入硬盘)。 fmemopen 函数更改文件的问题,因此当
我在“w+”模式下使用 fmemopen() 打开了一个内存流。我在这个文件中写了一些数据,然后我试图读取数据来计数。写的行。但是我通过使用 fgets() 访问这个文件得到了垃圾值。我的代码很大,所
我正在尝试从使用 fmemopen 和 char * 创建的流中读取宽字符。 char *s = "foo bar foo"; FILE *f = fmemopen(s,strlen(s),"r");
我正在使用 fmemopen 创建一个变量 FILE* fid 以将其传递给一个从打开的文件中读取数据的函数。 在该函数的某处,它使用以下代码找出文件的大小: fseek(fid, 0, SEEK_E
我无法让 fmemopen 一致地打印到 cstring。做这样的事情: #include #include int main(void) { char buf[256]; FIL
我有以下代码: char *filedata; FILE *f; filedata = malloc(3); if (filedata == NULL) { fprintf(stderr, "
我在 Linux 中有一个 fmemopen 文件描述符(指向父缓冲区),我希望能够在 C 中将此文件描述符设置为子进程的标准输入(我不为子进程设置)可以访问代码) 这可能吗?如果是这样,我该怎么做?
在阅读 string streams 上的 GNU 文档时我发现了两个相似的函数,它们做的事情非常相似: FILE * fmemopen (void *buf, size_t size, const
我正在尝试插入最初从 stdin 读取的 fscanf 函数,例如 fscanf(stdin,"%ms", &secret)。在我的插入函数中,我试图让它从我用字符串创建的输入文件中读取。以下是我正在
可以肯定的是,缓冲 I/O 到磁盘上的文件比无缓冲更快。但为什么即使写入内存缓冲区也有好处? 以下基准代码示例是使用 gcc 5.40 使用优化选项 -O3 编译的,链接到 glibc 2.24。 (
已通过 glibc 2.24 解决 -- 请参阅下面的更新 这是一段 C 代码(使用 gcc 5.3.1、glibc 2.23 编译): #include #include #include #
我可以使用什么来编写自定义流? 最佳答案 fmemopen 是 POSIX 但不是 C 标准的一部分。 fopencookie 不是任何标准的一部分;这是一个 GNU 函数。 tmpfile 是 fm
我是一名优秀的程序员,十分优秀!