Objective c popen中的目标C函数变量

Objective c popen中的目标C函数变量,objective-c,function,variables,popen,Objective C,Function,Variables,Popen,所以我有这个函数: void step (NSTextField *input, char move, int position, NSTextField *label) { int delta = input.intValue; for (int i = 0; i < delta; i++) { pclose(popen("echo move > /dev/tty.usbmodem621", "r")); position = position +1;

所以我有这个函数:

void step (NSTextField *input, char move, int position, NSTextField *label) {
  int delta = input.intValue;
  for (int i = 0; i < delta; i++) {
    pclose(popen("echo move > /dev/tty.usbmodem621", "r"));
    position = position +1;
    [NSThread sleepForTimeInterval:t1];
    NSString *printPosition = [NSString stringWithFormat: @"%i", position];
    label.stringValue = printPosition;
  }

}
Move应该是我在开头声明的变量字符。但我似乎不知道该怎么做。谁能给我点化一下吗

还有一件事我不明白。例如,如果我的输入是20,我运行这个脚本,它会像预期的那样计算20。然而,当我输入一个新的值时,它并没有像我希望的那样,将已经存在的值增加到20。相反,它只显示新值。有什么想法吗


谢谢

这是……我不会这么做的。你不需要打开一个管道或者做一个回音或者任何类似的事情来写入设备

考虑执行类似于[nsfilehandlefilehandleforwritingatpath:@”/dev/tty.usbmodem621“]的操作,然后使用writeData写入:


您可以使用-datausingencode:(可能是ASCII编码)从NSString获取NSData。

要使用move生成字符串,请执行以下操作:

NSString *str = [NSString stringWithFormat:@"echo %c > /dev/tty.usbmodem621", move];

关于不添加更多字符,这个示例很难说。我可以看到您的位置总是从0开始,因为它是传入参数,但没有返回。也许这就是问题所在?

Yikes。好的-第一个问题:

Move应该是我在开头声明的变量字符

不。popen()执行shell命令,它无法绑定到您的move变量。您需要做的是编写一个包含move字符的shell命令。类似于

char cmd[] = "echo # > /dev/tty.usbmodem621";
cmd[5] = move;
pclose(popen(cmd,"r"));

这让我想到了第二个问题:从外部数据构建shell命令,然后盲目执行它们,创建了一个称为“shell注入”的攻击向量,这是入侵系统的一种常见方法。 正如另一张海报已经指出的那样,您不需要popen()来执行此操作,如果我是您,我会避免编写shell命令,除非您真的必须这样做

char cmd[] = "echo # > /dev/tty.usbmodem621";
cmd[5] = move;
pclose(popen(cmd,"r"));