gpt4 book ai didi

c - 如何更换系统功能?

转载 作者:行者123 更新时间:2023-11-30 19:28:53 24 4
gpt4 key购买 nike

来自服务器的代码示例:

dup2( client, STDOUT_FILENO );  /* duplicate socket on stdout */
dup2( client, STDERR_FILENO ); /* duplicate socket on stderr too */

char * msgP = NULL;
int len = 0;
while (len == 0) {
ioctl(client, FIONREAD, &len);
}

if (len > 0) {
msgP = malloc(len * sizeof(char));
len = read(client, msgP, len);

system(msgP);
fflush(stdout);
fflush(stderr);
}

当我从客户端发送命令时,我调用系统函数。此功能对于许多命令来说已经足够了,但并不是对所有命令都足够。我尝试了几种不同的命令,但其中一些命令遇到了问题(例如:nano)。我面临的问题是,在调用系统函数后,我无法再为该命令发送任何输入(如果需要)。我仍然可以发送其他命令。我的问题是如何解决这个问题?

附注我做了一些测试,cd 命令也不起作用。谁能解释一下为什么?

感谢您的帮助!

最佳答案

testcd 命令内置于命令行 shell 中:shell 不会将它们作为外部程序执行。他们读取这些命令并通过在 shell 程序本身内部进行更改来处理它们。

当您使用 systemexec 系列中的例程执行程序时,它会创建一个运行该程序的单独进程。单独的进程可以读取输入、写入输出、更改文件以及在网络上进行通信,但它不能更改创建它的进程内部的内容(除了它可以通过在退出时提供状态代码来向该进程发送一些信息)或通过进程间通信的各种方式)。这就是cd不能与system一起执行的原因:一个单独的进程不能改变另一个进程的工作目录。为了执行cd命令,您必须调用chdirfchdir来更改您自己的进程的工作目录。

有一个单独的 test 命令,但有些 shell 选择在内部实现它而不是使用外部程序。关于nano,我不知道为什么它不适合你。当我使用 system("nano")system("nano xyz") 时,它对我有用。您必须提供有关您在 nano 中遇到的具体问题的更多信息。

ssh 提供远程命令执行的方式是在服务器上执行 shell 进程。 shell 是一个从输入读取命令并执行它们的程序。某些命令(例如 cd)在内部执行。它通过调用外部程序来执行其他命令。要提供类似的服务,您可以编写自己的 shell 或执行现有的 shell 之一。在 Unix 系统上,标准 shell 可能位于 /bin 中,名称以 sh 结尾,例如 /bin/bash/bin/csh。 (不过,并非所有以 sh 结尾的东西都一定是 shell。)

即使您执行 shell,也需要注意许多细节才能正确执行,包括:

  • 确保 shell 的标准输入、标准输出和标准错误流按照您希望的方式连接。
  • 将所需的环境和命令行参数传递给 shell。

关于c - 如何更换系统功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53570291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com