连接服务器并在c中使用系统功能时出错
error when connecting server and using system function in c
我是 c 语言的新手,尤其是套接字方面的新手,如果这个问题很愚蠢,我很抱歉。这是我的代码:
/****************** SERVER CODE ****************/
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main(){
int welcomeSocket, newSocket;
char buffer[1024];
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(7891);
serverAddr.sin_addr.s_addr = 0;
memset(serverAddr.sin_zero, '[=10=]', sizeof(serverAddr.sin_zero));
bind(welcomeSocket, (struct sockaddr *) &serverAddr,
sizeof(serverAddr));
if(listen(welcomeSocket,5)==0)
printf("Listening\n");
else
printf("Error\n");
addr_size = sizeof serverStorage;
newSocket = accept(welcomeSocket,
(struct sockaddr *) &serverStorage, &addr_size);
strcpy(buffer,"Hello World\n");
send(newSocket,buffer,13,0);
memset(buffer, '[=10=]', 1024);
while(recv(newSocket, &buffer, 1024, 0) > 0)
{
printf("%s", system(buffer));
memset(buffer, '[=10=]', 1024);
}
return 0;
}
这是我的服务器,我正在使用 telnet 连接(我知道它不安全,让任何用户在服务器中执行任何命令既不是为了教育目的)。当我键入 "ls"(服务器程序在 linux 上是 运行)时,它返回此错误 not found
分段错误(核心已转储) 并断开连接。我希望你能帮忙。谢谢
你的程序因为这一行而崩溃:
printf("%s", system(buffer));
如此处所述:http://linux.die.net/man/3/system
system()
调用返回一个整数,而不是 char*。
对于你想要的,你可以使用 popen()
。
例如,请参阅此问题的答案:
How to execute a command and get output of command within C++ using POSIX?
要么
How to get the output of grep in C
我是 c 语言的新手,尤其是套接字方面的新手,如果这个问题很愚蠢,我很抱歉。这是我的代码:
/****************** SERVER CODE ****************/
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main(){
int welcomeSocket, newSocket;
char buffer[1024];
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(7891);
serverAddr.sin_addr.s_addr = 0;
memset(serverAddr.sin_zero, '[=10=]', sizeof(serverAddr.sin_zero));
bind(welcomeSocket, (struct sockaddr *) &serverAddr,
sizeof(serverAddr));
if(listen(welcomeSocket,5)==0)
printf("Listening\n");
else
printf("Error\n");
addr_size = sizeof serverStorage;
newSocket = accept(welcomeSocket,
(struct sockaddr *) &serverStorage, &addr_size);
strcpy(buffer,"Hello World\n");
send(newSocket,buffer,13,0);
memset(buffer, '[=10=]', 1024);
while(recv(newSocket, &buffer, 1024, 0) > 0)
{
printf("%s", system(buffer));
memset(buffer, '[=10=]', 1024);
}
return 0;
}
这是我的服务器,我正在使用 telnet 连接(我知道它不安全,让任何用户在服务器中执行任何命令既不是为了教育目的)。当我键入 "ls"(服务器程序在 linux 上是 运行)时,它返回此错误 not found 分段错误(核心已转储) 并断开连接。我希望你能帮忙。谢谢
你的程序因为这一行而崩溃:
printf("%s", system(buffer));
如此处所述:http://linux.die.net/man/3/system
system()
调用返回一个整数,而不是 char*。
对于你想要的,你可以使用 popen()
。
例如,请参阅此问题的答案:
How to execute a command and get output of command within C++ using POSIX?
要么
How to get the output of grep in C