C:“读:坏地址”和“写:坏地址”

时间:2013-04-21 13:11:36

标签: c linux unix system

我想要使用FIFO和客户端获取目录路径的服务器 - 客户端模型,但我收到错误“读取:错误地址”和“写入:错误地址”。

客户

服务器错误:“读取:错误地址”

客户端错误:“写入:错误地址”

1 个答案:

答案 0 :(得分:0)

您可能滥用readwrite的返回值。成功后,他们会返回正值,并将其作为错误处理。

当读取字符串的大小时也是未知的。所以strlen是不合适的。

 if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0)
 {
     // error ...

write相同的条件。

传输字符串时,最好也传输字符串长度:

写作:

void write_string(int fd, const char *string)
{
    size_t len = strlen(string);
    write(fd, &len, sizeof(len));
    write(fd, string, len);
}

读:

void read_string(int fd, char *buffer, size_t size, size_t *len)
{
    size_t t_len;

    read(fd, &t_len, sizeof(t_len));
    if (t_len > size) t_len = size;
    read(fd, buffer, t_len);
    if (t_len < size) buffer[t_len] = 0; // null-terminate if there is enough space
    if (len) *len = t_len; // return length if wanted
}