我需要通过套接字读取一个整数并将其传递给函数。我做
strcpy(out,"insert id messagge\n");
if (write(sd_client,out, sizeof(out))==-1){
printf("Error.\n");
}
while ((read(sd_client, &id, sizeof(int)))==-1){ //id is an integer
if(errno!=EINTR){
printf("Error.\n");
exit(-1);
}
}
messaggio2(sd_client, logi, atoi(id)); //atoi(id) try to send int to func
有人可以帮我吗? :d
答案 0 :(得分:1)
read
和write
的第二个参数是数据的指针。
当你说:
write(sd_client,out, sizeof(out))
你传递的值。那应该是:
write(sd_client, &out, sizeof(out))
另外,我认为您已将id
声明为int(这是正确的),那么为什么要将其传递给atoi
?该函数用于从字符串中解析int。
答案 1 :(得分:0)
你所遇到的问题似乎有点模糊,因为你实际上没有提到你所得到的错误,但是从你发布的代码来看,你似乎遇到了两个不同的问题:
atoi()
用于将字符串值转换为整数...现在,您似乎已经有一个id
值的整数,因此atoi()
的参数不正确。您只需要使用sprintf()
或snprintf()
之类的东西将整数值转换为字符串值,然后将其复制到用户定义的字符串缓冲区中,如果您想要一个字符串表示形式的整数。ntohl()
之类的函数将整数转换为本机平台endian格式,该函数可以在头文件netinet/in.h
例如:
#include <netinet/in.h>
int id;
int sd_client;
//... code to open socket, etc.
//add your own error-checking ... stripped out here for simplicity's sake
read(sd_client, &id, sizeof(int));
id = ntohl(id);
char buffer[32];
snprintf(buffer, sizeof(buffer), "%d", id);
messaggio2(sd_client, logi, buffer);