我试图写一个客户端可以用来浏览服务器的目录的TCP服务器。 除此之外,我想发送目录的大小,如果这是一个普通的文件。 文件的大小被保存在一个“stat”结构下的size_tvariables中。 我在这里这样做:
char *fullName /* The path to the file *. /** * Some code here */ struct stat buffer; lstat(fullName, &buffer)
所以现在buffer.st_size包含文件的大小。 现在我想写()它的监听套接字,但显然我必须将其转换为string不知何故。 我知道这可以用按位右移(>>)操作符以某种方式完成,但对我来说似乎太痛苦了。 你能帮我一下吗(即使没有其他那些按位运算符)?
顺便说一下,这不是学校或水手…
PS:我在Linux上运行这个。
你可以使用sprintf()
函数的成员将“something”转换为“string”。
#define _POSIX_C_SOURCE 200112L #include <stdio.h> #include <unistd.h> #include <string.h> int main(void) { size_t s = 123456789; char str[256] = ""; snprintf(str, sizeof(str), "%zu", s); fprintf(stdout, "The size is '"); fflush(stdout); write(fileno(stdout), str, strlen(str)); fprintf(stdout, "'.\n"); return 0; }
打印出来:
The size is '123456789'.
你知道size_t
是无符号的,但是长度是未知的。 在C99中,我们有z
修饰符,使得完整的说明符%zu
:
size_t s = 123456789; char str[256]; snprintf(str, sizeof str, "%zu", s);
char *
不一定是一个字符串,你可以发送你想要的。 只管理其他计算机使用相同的协议。
所以你可以这样做:
write(socket, &(buffer.st_size), sizeof(size_t));
这可能是斋戒,你可能要考虑到排序等。