问题标签 [fdopen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
21156 浏览

python - Python - 如何将“操作系统级句柄到打开的文件”转换为文件对象?

tempfile.mkstemp()返回:

一个元组,包含一个打开文件的操作系统级句柄(将由 os.open() 返回)和该文件的绝对路径名,按此顺序。

如何将该操作系统级句柄转换为文件对象?

os.open()的文档指出:

要将文件描述符包装在“文件对象”中,请使用 fdopen()。

所以我尝试了:

0 投票
2 回答
3434 浏览

c - 调用 fdopen:错误的文件描述符

尝试编译我的程序时出现以下错误:

calling fdopen: Bad file descriptor

我读过这可能是与在我的一个头文件中包含预编译头有关的问题。导致错误的文件中包含 stdio.h 标头,因此我可以访问 FILE 类型。如果我删除它,错误就会消失,但是我不能使用 FILE 类型。有人知道我该如何解决这个问题吗?

0 投票
2 回答
18060 浏览

c - 创建文件描述符

我想在 C 中创建一个文件描述符,我将在代码中指定其值。我有一个整数变量,它指定要创建的文件描述符的值。例如,我可能需要一个值为 5 的文件描述符,然后将其与名为 "sample.dat" 的文件相关联。

0 投票
4 回答
16926 浏览

c - 使用具有非空读取缓冲区的套接字流时出现“非法查找”错误

我目前正在编写一个关于Linux x86_64使用<sys/socket.h>. 通过 接受连接后accept(),我使用fdopen()将检索到的套接字包装到FILE*流中。

写入和读取该FILE*流通常工作得很好,但是一旦我写入它,套接字就会变得不可用,而它有一个非空的读取缓冲区。

出于演示目的,我编写了一些代码来侦听连接,然后使用fgetc(). 如果该行太长而无法放入缓冲区,则不会完全读取,而是在下一次迭代期间读取。

代码应在 gcc 中编译,无需任何特殊参数。使用端口号作为参数运行它,并使用 netcat 在本地连接到它。

现在,如果您尝试发送少于 8 个字符的字符串,它将完美运行。但是如果你发送一个包含超过 10 个字符的字符串,程序就会失败。此示例输入:

将创建此输出:

如您所见,(正确地)只读取了 abcdefgh 的前 8 个字符,但是当程序尝试发送 'ack' 字符串(客户端从未收到),然后刷新输出缓冲区时,我们收到一个Illegal seek错误,并且下一次调用fgetc()返回 EOF。

如果该fflush()部分被注释掉,仍然会出现同样的错误,但是

服务器输出中缺少行。

如果该fputs(ack)部分被注释掉,一切似乎都按预期工作,但从 gdb 手动调用的 perror() 仍然报告“非法搜索”错误。

如果两者都fputs(ack)fflush()注释掉,那么一切都会预期工作。

不幸的是,我没有找到任何好的文档,也没有关于这个问题的任何 Internet 讨论,因此非常感谢您的帮助。

编辑

我最终解决的解决方案是使用fdopen()and FILE*,因为似乎没有干净的方法可以将套接字 fd 转换为FILE*可以在r+模式下可靠使用的 a 。fputs相反,我直接在套接字 fd 上工作,为and编写自己的替换代码fprintf

如果有人需要,这里是代码

0 投票
1 回答
625 浏览

c - 与 fgets 和 fprintf 兼容的文件锁定

我正在阅读http://beej.us/guide/bgipc/html/multi/flocking.html以进行文件锁定,现在我尝试弄清楚如何使用文件描述和文件指针(我需要 fprintf 和 fgets),这个代码实际上可以工作,但我不确定分配给 fdopen 的标志是否正确,这是继续的好方法吗?

0 投票
3 回答
20962 浏览

c - 如何使用相同的模式和标志打开 fdopen?

我想有一种FILE*可以使用的类型fprintf。我需要使用fdopen来获取 aFILE*而不是open返回一个int. 但是我们可以用fdopenand做同样的事情open吗?(我没用过fdopen

我想做一个fdopen与以下内容相同的事情:

0 投票
1 回答
217 浏览

sockets - socket() 创建的描述符可以映射到内存缓冲区吗?

有没有办法将 socket() 创建的描述符映射到内存缓冲区?

我寻找这个的原因是因为我想让一个现有的应用程序从我创建的内存缓冲区而不是其关联的 TCP 缓冲区中读取。我不应该修改应用程序,所以我想将应用程序返回的 fd 映射到我创建的缓冲区。

我发现了一个类似的问题: 可以将套接字的描述符转换为文件指针吗?

但是我不知道 fdopen() 是否可以用于我的目的,因为 fdopen() 只需要两个参数(fd 和 mode),而且我不知道如何将 fd 重新关联到我用 malloc 创建的内存( )。

0 投票
2 回答
6422 浏览

python - 如何使用'with'从'os'打开文件对象?

我正在尝试使用 'os.open()' 打开文件,如下所示

知道如何使用“with”从 os.fdopen 打开文件对象,以便自动关闭连接吗?

谢谢

0 投票
4 回答
228 浏览

c - 是否可以从 FILE* 中拯救文件描述符?

我必须使用某个跨平台库来传递FILE*对象。

我从另一个源(继承)获得一个文件描述符,我想在'd 进程中保持相同。fdfork

我目前用于fdopen将文件描述符转换为FILE*对象。

我的问题是fclose用于清理FILE*对象关闭连接的文件描述符。

我非常希望在使用此文件描述符后保留它。

有没有办法从中拯救文件描述符FILE*

有没有办法把它拆开?

FILE*或者一种用虚拟代替文件描述符的方法?

PS这需要是跨平台的,无论如何都要跨POSIX。

0 投票
1 回答
4064 浏览

c++ - fread 函数是否阻塞?

我有以下代码:

cout_file 是 FILE* 类型,并连接到二进制文件的标准输出。该二进制文件每隔 5 秒在其 std_out 上输出一些文本。

似乎 fread 一直阻塞,直到 cout_file 包含 buffer_max_size 个字节。这正常吗?

我希望能够在不阻塞的情况下立即读取管道中的内容。这可能吗?