有没有办法从iPhone上的stdin读取硬件或模拟器?

时间:2011-01-20 21:08:19

标签: iphone c xcode ios console

当我从XCode调试OSX应用程序时,我可以从XCode调试控制台与应用程序的控制台进行通信 - 例如,应用程序可以printf()stdout并且显示在XCode调试控制台上,我的应用程序可以在fgets()上调用stdin,我可以在XCode调试控制台中输入输入。

在调试iOS iPhone应用程序时,似乎XCode挂钩stdoutprintf() et.al。工作正常),但不是stdin

有没有人在iOS / iPhone上stdin工作?这在调试期间非常有用 - 即使使用iOS Cocoa应用程序也是如此。我可以用更复杂的方式使用它,比如使用套接字,但我只是让XCode为我做这个。

更新:

嗯,这可以解释它。 iOS模拟器实际为/dev/null打开stdin。可以找出stdout的去向(通常是/dev/ttys00X)然后用O_RDONLY重新打开它并将其分配给stdin。这适用于iOS模拟器,但看起来与iphone硬件的串行连接的线路规则是错误的 - 你可以在xcode调试控制台中输入输入,它永远不会被发送到iphone硬件(并且你的程序正在运行)在iPhone硬件上只会等待stdin又名/dev/ttys00X)上显示的内容。

我想知道是否有任何方法可以使用iPhone硬件?

1 个答案:

答案 0 :(得分:2)

我没有这个确切问题的解决方案,而且很可能没有办法做到这一点。我有另一个建议。我在我的一个项目中使用它并且效果很好。

我使用AsyncSocket库来实现微型TCP服务器,我可以使用telnet连接到该服务器并与我的应用程序通信。这种方法有一些优点:

  • 您不必在调试器下运行
  • 可从任何计算机访问该应用
  • 可以在别人的手机上访问应用程序(在团队中很方便)
  • 它是可编写脚本的(可以批量多个命令)
  • 可扩展(很容易使HTTP服务器与浏览器连接)