意外标记"("附近的语法错误

syntax error near unexpected token '('

本文关键字:语法 错误 意外      更新时间:2023-10-16

我正在用 c++ 在 unix 中做一些工作。我正在尝试在我的两个程序之间创建一个命名管道,并在它们之间来回发送一些文本。一切都编译正常,但是当我进行系统调用以运行服务器时.cpp我收到此错误消息。

./server.cpp: line 8: syntax error near unexpected token '('
./server.cpp: line 8: 'void test()'

导致此错误的原因是什么?我对 unix 或命名管道没有太多经验,所以我有点难倒。

这是我的代码

客户端.cpp

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
mkfifo("home/damil/myPipe", 0666);
fd=open("home/damil/myPipe", O_WRONLY);
write(fd,"test", sizeof("test")+1);
system("./server.cpp");
close(fd);
return 1; 
}

服务器.cpp

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
void test()
{
int fd;
char * comm;
fd = open("home/damil/myPipe", O_RDONLY);   
read(fd, comm, 1024);
printf(comm);
close(fd);
}

这不是C++错误,而是UNIX错误。通过运行system("./server.cpp"),您尝试运行.cpp文件,就好像它是编译的可执行文件一样。系统认为它是一个 shell 脚本,一旦超过#includes(在 shell 中,它被解析为注释,因此被忽略),就会遇到语法错误。

您需要编译server.cpp并运行生成的二进制文件。(注意:您可能希望将test()重命名为main()

g++ -Wall -o server server.cpp

然后在client.cpp中,将系统调用更改为:

system("./server");