Tag: file descriptor

是否为明确定义的相同文件描述符创建了两个FILE?

POSIX指定了一个fdopen函数,它为文件描述符创建一个FILE 。 POSIX还指定了一个fileno函数,该函数返回FILE文件描述符。 这两个可以一起用于创建第二个FILE访问与现有文件相同的底层文件描述符: FILE *secondfile(FILE *f, const char *mode) { int fd = fileno(f); return fd >= 0 ? fdopen(fd, mode) : NULL; } 这是POSIX下定义明确的操作吗? 当我访问原始FILE和我为同一文件描述符创建的第二个FILE时会发生什么? 是否指定了交互? 如果有,怎么样? 从历史上看,Unices为您打开的20个文件使用了固定的FILE结构表。 fdopen() ,在已经与FILE关联的文件描述符上调用fdopen()会破坏现有文件并产生未定义的行为。 我不确定POSIX是否仍允许这样的stdio实现,这就是我提出这个问题的原因。

传递文件描述符 – 执行(类型转换)

我想知道如何通过execve命令传递文件描述符,然后在另一端访问它。 我知道我可以使用dup2重定向文件描述符,但我不能这样做。 我需要实际将文件描述符传递给子进程并在子进程中使用它。 到目前为止我所拥有的: Parent使管道+ args如下: int pfd[2]; if(pipe(pfd) == -1) exitWithError(“PIPE FAILED”, 1); char *args_1[] = {“reader”, argv[1], (char*) pfd, (char *) 0}; 然后孩子像叉子一样调用execve: close(pfd[1]); execve(“./reader”, args_1, NULL); 然后,在读者程序中,我尝试访问传递的管道描述符: int main(int argc, char* argv[]){ … write(argv[2][1], buf, read_test); ^^ argv [2]应该引用管道描述符,然后[1]应该转到管道的写端。 我几乎肯定我需要在这里做一些不同的类型转换,但我尝试的一切都不太合适。 – 注意::我有一个这个程序的工作版本,使用dup2重定向到孩子的stdin和stdout,但是我必须按照项目的指示将管道描述符传递给子节点。 任何帮助表示赞赏。