C:“;改为:“地址不正确”;及;写:“地址不正确”;
我想使用FIFO和客户机获取目录路径的服务器客户机模型,但我得到错误“读取:错误地址”和“写入:错误地址” 客户端 服务器错误:“读取:错误地址”C:“;改为:“地址不正确”;及;写:“地址不正确”;,c,linux,unix,system,C,Linux,Unix,System,我想使用FIFO和客户机获取目录路径的服务器客户机模型,但我得到错误“读取:错误地址”和“写入:错误地址” 客户端 服务器错误:“读取:错误地址” 客户端错误:“write:Bad address”您可能误用了read和write的返回值。成功后,它们返回正值,您将其作为错误处理 另外,在读取字符串时,字符串的大小是未知的。所以strlen是不合适的 if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0) {
客户端错误:“write:Bad address”您可能误用了
read
和write
的返回值。成功后,它们返回正值,您将其作为错误处理
另外,在读取字符串时,字符串的大小是未知的。所以strlen是不合适的
if( (controlRead = read(fdp,pathName,sizeof(pathName)) ) <= 0)
{
// error ...
阅读:
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
}
void read\u string(int-fd,char*buffer,size\t size,size\t*len)
{
尺寸;
读取(fd和t_len,尺寸(t_len));
如果(t_len>size)t_len=size;
读取(fd、缓冲器、t_len);
如果(t_len
阅读一些关于C编程和Linux编程的好书。使用strlen(路径名)
作为read
的长度参数确实是错误的,这表明您很困惑。。。在花了一两天的时间阅读好的材料后,再次编写程序,使用gcc-Wall-g
进行编译,直到没有警告为止,然后使用gdb
调试器对其进行调试。不,strlen(路径名)
应该是sizeof(路径名)
@BasileStarynkevitch是的,也是这个。非常感谢。
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
}