gpt4 book ai didi

c - C 中的获取主机名(2)

转载 作者:行者123 更新时间:2023-12-02 05:35:06 24 4
gpt4 key购买 nike

我开发了一个迷你 shell,它可以接受来自标准输入的文本。它到目前为止有效,但我需要让它返回(在 > 之前的小东西中)

他们登录的机器名称和当前工作目录。

我有

#include <unistd.h>

在代码中,当前工作目录是使用 getcwd(2) 获取的,它工作正常,但 gethostname(2) 似乎不起作用。它不会在 MINGW32 上使用 gcc 进行编译,给出错误:未定义对“gethostname”collect2 的引用:ld reurned 1 退出状态。

到目前为止,这是我的代码。

#include <stdio.h>
#include <string.h>
#include <unistd.h>

static int LINE_MAX = 10000;
static char *cmdLine = "Samcmd --> ";


int main( int argc, char *argv[] )
{
char cwd[LINE_MAX];
char hostName[LINE_MAX];
int looper = 1;
char *token = NULL;
char line[LINE_MAX];
char *placehold = NULL;

getcwd(cwd, LINE_MAX - 1);
gethostname(hostName, LINE_MAX - 1);
while ( looper == 1 )
{
printf( "%s | %s", hostName, cmdLine );
if( fgets( line, LINE_MAX, stdin ) != NULL )
{
token = strtok( line, ";" );
do{
if( strcmp(token, "exit\n") == 0 ) /*if an exit command is issued*/
{
looper = 0;
}
system(token);
token = strtok( NULL, ";" );
} while ( token != NULL );
}
}
return 0;
}

欢迎任何批评和评论:)

最佳答案

这在我的系统上运行良好,打印了主机名,然后是提示。它打印当前工作目录,但这只是因为它不在 printf 中,这更适合作为:

printf( "%s | %s | %s", hostName, cwd, cmdLine );

在我的系统上,这给了我:

paxbox01 | /home/pax/Pax | Samcmd -->

如果您没有看到主机名,您需要知道调用可能会失败。您应该检查 gethostname 的返回值(以及 errno)以查看是否属于这种情况。

您可能还想澄清“似乎不起作用”是什么意思。它会崩溃吗?它给你一个空字符串吗?它是否给您一个您认为不正确的非空字符串?您是否只是因为在提示之前只输出了一个字符串而感到困惑(请参阅上面的解决方法)?

这将极大地帮助这里的任何人帮助您。


根据您添加的文本:

It won't compile using gcc on MINGW32, giving error: undefined reference to 'gethostname' collect2: ld reurned 1 exit status.

我认为您需要在 MinGW 中为此链接一个额外的库。 MinGW 并不意味着提供 UNIX 的所有功能(例如,CygWin 试图做到这一点)。更多的是提供gcc工具链来构建Windows应用。

您应该将 -lws2_32 选项添加到您的编译器行(最后),以便它引入 ws2_32 库,这是 gethostname 位于。

或者,Win32 API 包括 GetComputerNameEx我相信它没有额外的链接要求,尽管此时您的代码当然是不可移植的。

此外,在 MinGW 下,您可能会发现您需要使用 WinSock(包括 winsock2.h 并在之前调用 WSAStartup()调用任何网络功能)。我在 MinGw 下尝试这个已经有一段时间了,但我似乎记得这是一项要求(它可能已经改变)。

关于c - C 中的获取主机名(2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11822175/

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