我该如何解决 "expected a ';' in C"
How do I solve "expected a ';' in C"
我正在努力完成我的网络编程练习。我遇到了这个我无法解决的问题。这可能看起来很愚蠢,但我已经花了一个下午在上面。如果有人能帮助我,我将不胜感激。
这是代码,错误在#ifdef process_conn_server_2段内。
#include <stdio.h>
#include <sys/uio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/types.h>
#include "process_num.c"
#define process_conn_client_2
#define process_conn_server_2
static struct iovec *vs = NULL,
*vc = NULL;
void sig_process(int signo)
{
printf("Catch ax exit signal\n");
free(vc);
free(vs);
_exit(0);
}
void sig_pipe(int signo)
{
printf("Catch a SIGPIPE signal\n");
free(vc);
free(vs);
_exit(0);
}
#ifdef process_conn_client_0
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[1024];
for (;;)
{
size = read(0, buffer, 1024);
// size = recv(s, buffer, 1024, 0);
if (size > 0)
{
send(s, buffer, size, 0);
size = recv(s, buffer, 1024, 0);
write(1, buffer, size);
}
}
}
#endif // read、send、write
#ifdef process_conn_client_1
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
printf("Not enough memory\n");
return;
}
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
int i = 0;
for (;;)
{
size = read(0, v[0].iov_base, 10);
if (size > 0)
{
v[0].iov_len = size;
writev(s, v, 1);
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
size = readv(s, v, 3);
for (i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
}
}
}
}
}
#endif // read writev readv
#ifdef process_conn_client_2
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
// int fd;
for (;;)
{
// fd = open("firstfile.txt", O_RDONLY, 0666);
size = read(0, v[0].iov_base, 10);
printf("%d size\n", size);
if (size > 0)
{
v[0].iov_len = size;
if (sendmsg(s, &msg, 0) < 0)
{
perror("");
return;
}
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
size = recvmsg(s, &msg, 0);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
}
}
#endif // sendmsg recvmsg
#ifdef process_conn_server_0
void process_conn_server(int s)
{
ssize_t size = 0;
char buffer[1024];
float result;
for (;;)
{
// size = read(s, buffer, 1024);
size = recv(s, buffer, 1024, 0);
if (size == 0)
{
return;
}
printf("received %s", buffer);
result = process_num(buffer);
if (result == 65535)
{
sprintf(buffer, "%d bytes in total.\n", size);
}
else
{
printf("%f\n", result);
sprintf(buffer, "the result is %f.\n", result);
}
//write(s, buffer, strlen(buffer) + 1);
send(s, buffer, strlen(buffer) + 1, 0);
memset(buffer, '[=11=]', sizeof(buffer));
}
}
#endif //recv send
#ifdef process_conn_server_1
void process_conn_server(int s)
{
char buffer[30];
ssize_t size = 0;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
printf("Not enough memory\n");
return;
}
vs = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
for (;;)
{
size = readv(s, v, 3);
if (size == 0)
{
return;
}
sprintf(v[0].iov_base, "%d ", size);
sprintf(v[1].iov_base, "bytes alt");
sprintf(v[2].iov_base, "ogether\n");
v[0].iov_len = strlen(v[0].iov_base);
v[1].iov_len = strlen(v[1].iov_base);
v[2].iov_len = strlen(v[2].iov_base);
writev(s, v, 3);
}
}
#endif // readv writev
#ifdef process_conn_server_2
void process_conn_server(int s)
{ //this is where the error appears
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vs = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
for (;;)
{
size = recvmsg(s, &msg, 0);
if (size == 0)
{
return;
}
sprintf(v[0].iov_base, "%d ", size);
sprintf(v[1].iov_base, "bytes alt");
sprintf(v[2].iov_base, "ogether\n");
v[0].iov_len = strlen(v[0].iov_base);
v[1].iov_len = strlen(v[1].iov_base);
v[2].iov_len = strlen(v[2].iov_base);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
sendmsg(s, &msg, 0);
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
}
}
#endif
我不知道这是否有任何帮助,但当我
时代码工作正常
定义 process_conn_server/client 0/1 而不是 2。
当 process_conn_client_2 被定义时,您似乎没有关闭 process_conn_client(),因此在此之后打开另一个函数会给您一个错误。从缩进可以看出
只是为了全面澄清。 process_conn_client_2
定义的末尾缺少右括号 }
以终止函数定义。因此错误。
我在这段代码中用正确的 }
标记了问题所在:
#ifdef process_conn_client_2
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
// int fd;
for (;;)
{
// fd = open("firstfile.txt", O_RDONLY, 0666);
size = read(0, v[0].iov_base, 10);
printf("%d size\n", size);
if (size > 0)
{
v[0].iov_len = size;
if (sendmsg(s, &msg, 0) < 0)
{
perror("");
return;
}
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
memset(v[0].iov_base, '[=10=]', v[0].iov_len);
memset(v[1].iov_base, '[=10=]', v[1].iov_len);
memset(v[2].iov_base, '[=10=]', v[2].iov_len);
size = recvmsg(s, &msg, 0);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
memset(v[0].iov_base, '[=10=]', v[0].iov_len);
memset(v[1].iov_base, '[=10=]', v[1].iov_len);
memset(v[2].iov_base, '[=10=]', v[2].iov_len);
}
}
} // <------- HERE
#endif // sendmsg recvmsg
由于打字错误,我投票决定关闭此问题。
我正在努力完成我的网络编程练习。我遇到了这个我无法解决的问题。这可能看起来很愚蠢,但我已经花了一个下午在上面。如果有人能帮助我,我将不胜感激。
这是代码,错误在#ifdef process_conn_server_2段内。
#include <stdio.h>
#include <sys/uio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <sys/types.h>
#include "process_num.c"
#define process_conn_client_2
#define process_conn_server_2
static struct iovec *vs = NULL,
*vc = NULL;
void sig_process(int signo)
{
printf("Catch ax exit signal\n");
free(vc);
free(vs);
_exit(0);
}
void sig_pipe(int signo)
{
printf("Catch a SIGPIPE signal\n");
free(vc);
free(vs);
_exit(0);
}
#ifdef process_conn_client_0
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[1024];
for (;;)
{
size = read(0, buffer, 1024);
// size = recv(s, buffer, 1024, 0);
if (size > 0)
{
send(s, buffer, size, 0);
size = recv(s, buffer, 1024, 0);
write(1, buffer, size);
}
}
}
#endif // read、send、write
#ifdef process_conn_client_1
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
printf("Not enough memory\n");
return;
}
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
int i = 0;
for (;;)
{
size = read(0, v[0].iov_base, 10);
if (size > 0)
{
v[0].iov_len = size;
writev(s, v, 1);
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
size = readv(s, v, 3);
for (i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
}
}
}
}
}
#endif // read writev readv
#ifdef process_conn_client_2
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
// int fd;
for (;;)
{
// fd = open("firstfile.txt", O_RDONLY, 0666);
size = read(0, v[0].iov_base, 10);
printf("%d size\n", size);
if (size > 0)
{
v[0].iov_len = size;
if (sendmsg(s, &msg, 0) < 0)
{
perror("");
return;
}
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
size = recvmsg(s, &msg, 0);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
}
}
#endif // sendmsg recvmsg
#ifdef process_conn_server_0
void process_conn_server(int s)
{
ssize_t size = 0;
char buffer[1024];
float result;
for (;;)
{
// size = read(s, buffer, 1024);
size = recv(s, buffer, 1024, 0);
if (size == 0)
{
return;
}
printf("received %s", buffer);
result = process_num(buffer);
if (result == 65535)
{
sprintf(buffer, "%d bytes in total.\n", size);
}
else
{
printf("%f\n", result);
sprintf(buffer, "the result is %f.\n", result);
}
//write(s, buffer, strlen(buffer) + 1);
send(s, buffer, strlen(buffer) + 1, 0);
memset(buffer, '[=11=]', sizeof(buffer));
}
}
#endif //recv send
#ifdef process_conn_server_1
void process_conn_server(int s)
{
char buffer[30];
ssize_t size = 0;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
printf("Not enough memory\n");
return;
}
vs = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
for (;;)
{
size = readv(s, v, 3);
if (size == 0)
{
return;
}
sprintf(v[0].iov_base, "%d ", size);
sprintf(v[1].iov_base, "bytes alt");
sprintf(v[2].iov_base, "ogether\n");
v[0].iov_len = strlen(v[0].iov_base);
v[1].iov_len = strlen(v[1].iov_base);
v[2].iov_len = strlen(v[2].iov_base);
writev(s, v, 3);
}
}
#endif // readv writev
#ifdef process_conn_server_2
void process_conn_server(int s)
{ //this is where the error appears
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vs = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
for (;;)
{
size = recvmsg(s, &msg, 0);
if (size == 0)
{
return;
}
sprintf(v[0].iov_base, "%d ", size);
sprintf(v[1].iov_base, "bytes alt");
sprintf(v[2].iov_base, "ogether\n");
v[0].iov_len = strlen(v[0].iov_base);
v[1].iov_len = strlen(v[1].iov_base);
v[2].iov_len = strlen(v[2].iov_base);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
sendmsg(s, &msg, 0);
memset(v[0].iov_base, '[=11=]', v[0].iov_len);
memset(v[1].iov_base, '[=11=]', v[1].iov_len);
memset(v[2].iov_base, '[=11=]', v[2].iov_len);
}
}
#endif
我不知道这是否有任何帮助,但当我
时代码工作正常定义 process_conn_server/client 0/1 而不是 2。
当 process_conn_client_2 被定义时,您似乎没有关闭 process_conn_client(),因此在此之后打开另一个函数会给您一个错误。从缩进可以看出
只是为了全面澄清。 process_conn_client_2
定义的末尾缺少右括号 }
以终止函数定义。因此错误。
我在这段代码中用正确的 }
标记了问题所在:
#ifdef process_conn_client_2
void process_conn_client(int s)
{
char buffer[30];
ssize_t size = 0;
struct msghdr msg;
struct iovec *v = (struct iovec *)malloc(3 * sizeof(struct iovec));
if (!v)
{
perror("wrong: allocate memory\n");
return;
}
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_iov = v;
msg.msg_iovlen = 3;
msg.msg_flags = 0;
vc = v;
v[0].iov_base = buffer;
v[1].iov_base = buffer + 10;
v[2].iov_base = buffer + 20;
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
// int fd;
for (;;)
{
// fd = open("firstfile.txt", O_RDONLY, 0666);
size = read(0, v[0].iov_base, 10);
printf("%d size\n", size);
if (size > 0)
{
v[0].iov_len = size;
if (sendmsg(s, &msg, 0) < 0)
{
perror("");
return;
}
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
memset(v[0].iov_base, '[=10=]', v[0].iov_len);
memset(v[1].iov_base, '[=10=]', v[1].iov_len);
memset(v[2].iov_base, '[=10=]', v[2].iov_len);
size = recvmsg(s, &msg, 0);
for (int i = 0; i < 3; i++)
{
if (v[i].iov_len > 0)
{
write(1, v[i].iov_base, v[i].iov_len);
write(1, '\n', 1);
}
}
memset(v[0].iov_base, '[=10=]', v[0].iov_len);
memset(v[1].iov_base, '[=10=]', v[1].iov_len);
memset(v[2].iov_base, '[=10=]', v[2].iov_len);
}
}
} // <------- HERE
#endif // sendmsg recvmsg
由于打字错误,我投票决定关闭此问题。