根据标题.我在Apple网站上搜索过,找不到任何相关信息.我还不是iPhone的开发者成员,所以不能访问那些东西.我只是想开发一个可以与FaceTime协议交谈的Android应用程序.
如果我们所有人都必须向Apple支付费用来查看FaceTime文档以在我们的非iOS应用程序中实现协议,那将会有点愚蠢.
好的我有一个程序可以创建两个管道 - >分叉 - >孩子的stdin和stdout被重定向到每个管道的一端 - >父管道连接到管道的另一端并尝试读取与子管道相关的流输出并将其打印到屏幕上(我最终还会将其写入孩子的输入).
问题是,当父级尝试fgets子级的输出流时,它只是停止并等待,直到子级死于fgets然后打印输出.如果孩子没有退出,它就会永远等待.到底是怎么回事?我想也许fgets会阻塞直到SOMETHING在流中,但是在孩子放弃文件描述符之前不会一直阻塞.
这是代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
FILE* fpin;
FILE* fpout;
int input_fd[2];
int output_fd[2];
pid_t pid;
int status;
char input[100];
char output[100];
char *args[] = {"/somepath/someprogram", NULL};
fgets(input, 100, stdin); // the user inputs the program name to exec
pipe(input_fd);
pipe(output_fd);
pid = fork();
if (pid == 0) {
close(input_fd[1]);
close(output_fd[0]);
dup2(input_fd[0], 0);
dup2(output_fd[1], 1);
input[strlen(input)-1] = '\0';
execvp(input, args);
} …Run Code Online (Sandbox Code Playgroud) 假设你有一个BlahChild类型的对象,它是BlahParent的扩展,当BlahChild调用super()时会发生什么.omeMethod和someMethod包含对另一个函数的调用,anotherMethod()在BlahChild中也被覆盖?
是否会调用BlahChild的另一个方法,或者BlahParent的另一个方法?
stdinBackup = 4;
dup2(0, stdinBackup);
Run Code Online (Sandbox Code Playgroud)
目前,我正在执行上述操作来“备份”标准输入,以便稍后在将其重定向到其他地方后可以从备份中恢复它。我有一种感觉,我做错了很多事?(例如任意分配4肯定是不对的)。有人指出我正确的方向吗?
我在这方面的数学有点不稳定。有人知道我如何使用* /-+和for循环以外的数学函数来计算10 ^ 2.2之类的幂吗?我没有访问数学库的权限(并且无法导入/包含它),但是需要计算这些东西。嗯..也许我应该看看数学库是如何做到的。
所以,如果我这样做:
dup2(0, backup); // backup stdin
dup2(somefile, 0); // somefile has four lines of content
fgets(...stdin); // consume one line
fgets(....stdin); // consume two lines
dup2(backup, 0); // switch stdin back to keyboard
Run Code Online (Sandbox Code Playgroud)
我在这一点上发现.. stdin仍然包含我没有消耗的两条线.这是为什么?因为无论重定向多少次,只有一个缓冲区?我如何摆脱剩下的两行,但是当我想回到它时,仍然记得我在somefile流中的位置?