- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下 C 代码。child 用于运行 test3,其代码如下。父级用于将数据传递给子级,子级将重定向到 test3 的 STDIN。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char *argv[]) {
int fd[2];
char buf[] = "HELLO WORLD!";
if(pipe(fd)){
perror("pipe");
return -1;
}
switch(fork()){
case -1:
perror("fork");
return -1;
case 0:
// child
close(fd[1]);
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
system("./test3");
default:
// parent
close(fd[0]);
FILE* stream = fdopen(fd[1],"w");
if(stream == NULL){ // error checking
printf("Error creating a file\n");
printf("%s\n", strerror(errno));
return -1;
}
// write data to pipe
fwrite(buf, 1,6,stream);
close(fd[1]);
fclose(stream);
}
printf("END~\n");
return 0;
}
这是 test3 代码:
#include <stdio.h>
int main(){
char n[1000];
scanf("%s",n);
printf("%s\n",n);
}
我的问题是父代码中的 fdopen
返回 NULL 和 Bad file descriptor error
我无法找出原因。谁能帮忙?
提前致谢。
最佳答案
错误实际上来自 child ,而不是 parent 。在 child 通过系统调用运行 test3
之后,它会陷入 default:
的情况,尝试 fdopen
它已经关闭的文件描述符.在系统调用后添加 break;
错误将消失。
第二个问题是父级中的 close(fd[1])
,它会在刷新您使用 fwrite< 写入的数据之前从 FILE 指针下关闭文件描述符
。在 close
之前放置一个 fflush(stream);
调用,或者干脆去掉 close
,作为 fclose
将关闭文件描述符。
关于c - 使用 fdopen 时文件描述符错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49595384/
我想要一个 FILE* 类型来使用 fprintf。我需要使用 fdopen 来获取 FILE* 而不是返回 int 的 open。但是我们可以对 fdopen 和 open 做同样的事情吗? (我从
我使用 fdopen 将流与打开的文件相关联。 当我close()文件,流是否也自动解除关联,并且所有流内存都返回到操作系统,还是我需要知道 fdopen 文件并以特定方式关闭它? -亚当 最佳答案
如果有的话,我需要做什么来关闭从 os.open 获得并随后与 with os.fdopen 一起使用的文件描述符?我从下面的代码中得到的 OSError 让我认为答案可能是“无”,但我无法在文档中找
我正在尝试使用 fopen 和 fdopen 创建并打开一个文件来写入一些内容。下面是我写的代码: char Path[100]; int write_fd; snprintf
下面的代码应该将“一些文本”写入 demo.txt,但它不起作用: #include #include #include #include #include int main(int arg
我有以下 C 代码。child 用于运行 test3,其代码如下。父级用于将数据传递给子级,子级将重定向到 test3 的 STDIN。 #include #include #include #
我有一个 socket socks : int sock = socket(...); connect(sock, ...); // or sock = accept(sock_listen, 0,
APUE 说 With fdopen, the meanings of the type argument differ slightly. The descriptor has already be
我正在尝试了解标准 I/O。我遇到了调用 fdopen() 的问题。 如果我按如下方式在同一个文件描述符上调用 fdopen(),会有什么行为?为什么我得到 '\377' (-1) 的输出? #inc
这个问题在这里已经有了答案: C - Proper way to close files when using both open() and fdopen() (2 个答案) 关闭 3 年前。 如
我在尝试编译我的程序时遇到以下错误: 调用 fdopen:错误的文件描述符 我读到这可能是与在我的一个头文件中包含预编译头有关的问题。导致错误的文件中包含 stdio.h header ,因此我可以访
我曾经认为 os.fdopen() 要么吃掉文件描述符并返回一个文件 io 对象,要么引发异常。 例如: fd = os.open("/etc/passwd", os.O_RDONLY) try: o
我无法从 mkstemp 返回的句柄写入由 fdopen 打开为 rw 的文件。 >>> import tempfile >>> import os >>> a = tempfile.mkstemp(
我在调用 fdopen 时遇到错误并将 errno 设置为 22。我正在使用 exec 命令调用子进程。子进程在文件描述符 4 上调用 fdopen。第一个子进程工作并将数据发送回父进程,errno
这个问题与 Write file with specific permissions in Python 的答案有关用于打开具有特定权限的写入文件(在 python 中)。 答案中的代码如下所示: w
以下哪项更正确? fi, path = tempfile.mkstemp() f = os.fdopen(fi, "w") f.write(res) f.close() os.close(fi) 或:
因此,我正在用 C 构建一个 Unix minishell,并正在实现输入、输出和错误重定向,并且遇到了文件问题。我在找到重定向运算符的循环中打开我的文件,并使用 open(),它返回一个 fd。然后
这个问题在这里已经有了答案: Why does open make my file descriptor 0? (4 个答案) 关闭 5 年前。 我将 open() 与 O_RDWR 一起使用,然后
int source = open("hi", O_CREAT | O_RDONLY); int dest = open("resultfile", O_CREAT | O_RDWR | O_TRUN
这段代码在 Python 2.7.16 和 3.8.3 上运行时会产生不同的结果: import tempfile import os fd, lockfile = tempfile.mkstemp(
我是一名优秀的程序员,十分优秀!