这是我编写的代码的一部分,用于填充0在我的一个Ubuntu终端选项卡中打开的屏幕会话。
char command[60];
strcpy( command, "screen -S 8305.pts-1.MYUb -X stuff $'0'" );
system(command);
它编译得很好,只有一个警告
ignoring return value of ‘system’,
但是当涉及到运行时,我得到如下信息:
No screen session found.
我已尝试使用其他shell命令的system(),它工作得非常好。当您在终端会话中而不是在c代码中运行它时,屏幕命令也可以正常工作。
最有可能的是,您以与拥有该屏幕的用户不同的用户身份运行该命令。例如,将二进制文件作为sudo运行。
您可以运行ps aux
来查找运行二进制文件的用户。
要使系统命令工作,您应该以拥有该屏幕的用户身份运行它。
我认为问题是你正在使用-S
创建一个新的命名屏幕,而-X
则向已经运行的屏幕会话提交命令。
你要么:
system( "screen -S 8305.pts-1.MYUb cmd" );
要么
system( "screen -r 8305.pts-1.MYUb -X cmd" );
仅供参考 - 我不确定stuff $0
应该是什么,并且在您提供的代码的上下文中不起作用 - 但我相信与您报告的问题不同的问题。
来自man(1)
页面
-S sessionname 创建新会话时,此选项可用于为会话指定有意义的名称。
和
-X将指定的命令发送到正在运行的屏幕会话。