c - tar_fdopen 以及以前使用过的文件描述符

标签 c sockets tar

我正在使用libtar编写一个客户端服务器,通过套接字将存档发送到服务器。

此代码有效(服务器端):

socket_fd = socket(AF_INET,SOCK_STREAM,0));

bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(PORT_MIGRATION_COPY);

bind(socket_fd,(struct sockaddr *)&addr, sizeof(addr));

listen(socket_fd,1);    // Only 1 client

size_addr_cl = sizeof(addr_cl);
socket_cl = accept(socket_fd, (struct sockaddr *) &addr_cl, &size_addr_cl); // Wait until client arrives

tar_fdopen(&tar, socket_cl, NULL, NULL, O_RDONLY, 0644, 0);
tar_extract_all(tar, path);
tar_close(tar);
close(socket_fd);

此外,我需要在存档之前读取一个整数,所以我输入:

read(socket_fd, (char *)&number,sizeof(int));

tar_fd_open之前,并在客户端添加相应行:

 write(socket_fd, (char *)&number,sizeof(int));

坏消息, tar 提取物停止工作,我不明白为什么。为什么先前的读/写会干扰文件描述符的下一个操作?

最佳答案

哦,我发现了一个愚蠢的错误,我正在从socket_fd而不是socket_cl读取!该死的。

关于c - tar_fdopen 以及以前使用过的文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331857/

相关文章:

c - Ascii 十六进制值到 ascii 数字

c - 在c内核保护模式下不获取键盘输入

c - 为什么 INET6_ADDRSTRLEN 在 C 中定义为 46?

ios - 如何在自签名证书上使用 Socket-IO-Swift 进行连接?

python - 我想通过(Python)为解压缩(.tar.gz)文件创建一个脚本

c - 如何将结构写入文件?

编译GLFW找不到-lglfw3

sockets - 如何知道我的套接字连接成功与否?

javascript - 如何从浏览器中提取 .tar.gz 文件(存储在云中)中的数据

linux - 如何更改 tar 球的保存位置?