在 VxWorks 6.7 中从内部代码执行脚本
在VxWorks 5.5.1 中,您可以使用execute 命令运行脚本。在VxWorks 6.7中,不再支持执行命令。现在有谁可以换吗?我具体是从内部代码而不是命令行谈论的。
In VxWorks 5.5.1 you could run a script using the execute command. In VxWorks 6.7 the execute command is no longer supported. Does anyone now if there is a replacement? I am specifically talking about from inside code not command line.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通过大量研究,似乎有几种方法可以实现此目的,但没有一种方法与之前的执行命令完全相同。正如我在下面的评论中所说,执行命令不是官方 API 调用。
1) shellCmdExec 可以使用,但大多数是从 shell 任务内部调用的。
2) 我们选择采用的解决方案 - 从我们的启动脚本中调用它
3) 一种 hack 方式:
fd = open("/y/startup.go", 0, 0) /* 打开你想要的脚本执行/
v=shellFromNameGet("tShell0") / 获取 shell id */
/* 使用 shellinOutGet 保存 shell 的标准输入 /
shellInOutSet (v, fd, -1, -1) / 设置 shell 的标准 in 到文件 */
/* 这里你应该恢复标准 in (事先做一个 shellInOutGet)。在 shell 使用脚本完成后执行此操作。我想说的是,当 ti 完成时,你的脚本应该增加一个变量。 */
关闭(fd)
Through much research it appears like there are a few ways to accomplish this but none is exactly the same as the execute command from before. As I stated in the comment below it turns out that the execute command is not an official API call.
1) shellCmdExec can be used but most be called from inside the shell task.
2) The solution we choose to employ - which is to call it from within our startup script
3) And a hack way:
fd = open("/y/startup.go", 0, 0) /* open the script you want to execute /
v=shellFromNameGet("tShell0") / Get the shell i.d. */
/* Use shellinOutGet to save off the standard in of the shell /
shellInOutSet (v, fd, -1, -1) / Set the standard in of the shell to the file */
/* Here you should restore the standard in (do a shellInOutGet beforehand). Do it after the shell is done with the script. I would say that your script should increrment a variable when ti is done. */
close(fd)
VxWorks Kernel程序员指南6.7中有一个解决方案,问题是它对我不起作用,但它可以帮助你:
检查文档的第15.2.15节。
There's a solution in the VxWorks Kernel programmer's guide 6.7, the problem is that it did not work for me, but it could help you:
Check Section 15.2.15 of the document.
您可以在串行驱动程序层中完成此操作。尝试以下代码。它展示了如何将文本发送到 shell 的输入。
例如,
pass_to_sio("memShow; ifconfig");在你的c代码中。
-> sp pass_to_sio, "memShow; ifconfig" 在 shell 中。
pass_to_sio("< test.scr");如果您想运行脚本文件,请在您的 C 代码中添加。
->如果要运行脚本文件,请在 shell 中 sp pass_to_sio, "< test.scr"。
You can do it in the serial driver layer. Try the following code. It shows how to send text to the shell's input.
For example,
pass_to_sio("memShow; ifconfig"); in your c code.
-> sp pass_to_sio, "memShow; ifconfig" in the shell.
pass_to_sio("< test.scr"); in your c code if you want to run a script file.
-> sp pass_to_sio, "< test.scr" in the shell if you want to run a script file.