服务端C代码实现命令mkdir
时间: 2023-09-08 07:07:48 浏览: 93
要在服务端使用C代码实现创建目录的功能,你需要使用系统调用函数以及进程间通信来实现。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 8888
int main() {
int server_sock = socket(AF_INET, SOCK_STREAM, 0);
if (server_sock == -1) {
perror("socket error");
exit(EXIT_FAILURE);
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(server_sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {
perror("bind error");
exit(EXIT_FAILURE);
}
if (listen(server_sock, 10) == -1) {
perror("listen error");
exit(EXIT_FAILURE);
}
printf("等待客户端连接...\n");
while (1) {
struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
int client_sock = accept(server_sock, (struct sockaddr*)&client_addr, &client_len);
if (client_sock == -1) {
perror("accept error");
continue;
}
printf("客户端连接成功!\n");
char request[1024];
if (recv(client_sock, request, sizeof(request), 0) == -1) {
perror("recv error");
close(client_sock);
continue;
}
char dirname[100];
sscanf(request, "mkdir %s", dirname);
if (mkdir(dirname, 0777) == -1) {
perror("mkdir error");
const char* response = "目录创建失败!";
send(client_sock, response, strlen(response), 0);
} else {
const char* response = "目录创建成功!";
send(client_sock, response, strlen(response), 0);
}
close(client_sock);
}
close(server_sock);
return 0;
}
```
在这个示例中,我们使用了Socket编程来创建一个服务端,接收客户端的连接请求。首先创建了一个服务端的套接字,并使用`bind`函数将其绑定到指定的IP和端口。然后使用`listen`函数监听连接请求。
在主循环中,通过`accept`函数接收客户端的连接,并创建一个新的套接字`client_sock`与客户端通信。然后使用`recv`函数接收客户端发送的命令请求。
接下来,通过解析客户端发送的请求字符串,提取出要创建的目录名。然后使用`mkdir`函数创建目录。如果创建失败,通过`perror`函数打印错误信息,并向客户端发送创建失败的响应信息。如果创建成功,则向客户端发送创建成功的响应信息。
请注意,示例中使用了预定义的服务器端口号`SERVER_PORT`,你可以根据实际情况修改这个值。另外,该示例中只是简单地处理了一个命令请求,并发送了相应的响应信息,你可以根据实际需求在服务端进行相应的逻辑处理。
阅读全文