我想使用 clang/llvm API 来编译一个在字符串中定义的 c 函数并立即执行它。就像是:
void main() {
std::string codestr = "int foo(int bar) { return bar * 2; }"
clang::??? *code = clang::???.compile(codestr);
int result = code->call("foo", 5);
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找教程,但到目前为止我发现的内容与我的目标不太相符或不起作用,因为它引用了 LLVM 的过时版本。目前,我使用的是 LLVM 3.5。
有人手头上有好的教程吗?
这里是一个示例程序,用于从服务器程序中的多个客户端到服务器获取月份或年份或时间请求,这里我无法发送"Fri Jan 11 11:59:51 2008"从服务器程序中的缓冲区到客户端的完整字符串.只有周五独自阅读客户端.
SERVER程序
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include <unistd.h>
#include <fcntl.h>
#include<sys/stat.h>
#include<time.h>
int main(int argc,char **argv) {
int len,ch=0;
int sockfd,newfd;
struct sockaddr_in servaddr,cliaddr;
char str[1000];
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
printf("cannot create socket");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=INADDR_ANY;
servaddr.sin_port=htons(7220);
if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
printf("Bind error");
listen(sockfd,5);
len=sizeof(cliaddr);
time_t current_time = time(NULL);
struct tm* local_time = localtime(¤t_time);
char *buff=asctime(local_time);
int leng=sizeof(buff);
//strcpy(buff,buff1);
printf("%d",leng);
printf("%s",buff);
int n=0;
while(1) {
newfd=accept(sockfd,(struct sockaddr*)&cliaddr,&len);
printf("request from client%d",n++);
n=write(newfd,buff,sizeof(buff));
//n=write(newfd,buff1+1,sizeof(buff1));
printf("message sent to client%d",n);
}
close(newfd);
close(sockfd); …
Run Code Online (Sandbox Code Playgroud) int rc = poll(fds, 1, -1); 假设远程对等点出现故障。套接字在这里中断。在这种情况下,poll 系统调用将返回 -1 或将返回 > 0 并将断开连接报告为 FD 上的错误事件。
另外,轮询在 0 超时时会返回什么。int rc = poll(fds, nfds, 0);