草庐IT

socket_write

全部标签

c++ - 像 read() 、 write() 这样的函数调用是 linux 中的实际系统调用吗?

我一直在用C/C++编写程序,这些程序利用LinuxAPI并进行系统调用,如fork()、read()、write()等。现在,我开始怀疑这些库函数是否真的是系统调用,或者它们是某种包装函数。当程序调用write()时到底发生了什么?这个函数如何与内核交互?如果这是一个包装器,那我们为什么需要它? 最佳答案 所有这些函数都是libc.so中的真实用户空间函数,您的二进制文件与之链接。但它们中的大多数只是系统调用的微小包装器,它们是用户空间和内核之间的接口(interface)(另请参见syscall(2))。请注意,纯用户空间的函数

Linux-Socket实现模拟群聊(多人聊天室)

Linux-Socket实现模拟群聊(多人聊天室)简单版本服务端源码#include#include#include#include#include#include#include#include#defineMAX100typedefstructClient{//socket文件描述符intcfd;//客户端名称charname[50];}Client;//设置最多群聊人数Clientclient[MAX]={};size_tcount=0;//初始化互斥锁pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER;//广播函数voidbroadcast(c

c - 为什么 linux 108 上的 unix-sockets 允许最大路径长度?

创建unix套接字时,路径名(man7unix)允许最长为108个字符。对于一个friend来说,这导致他的程序出现错误,因为他的路径更长。现在我们想知道这个数字究竟是如何确定的。我怀疑这个数字是确定的,因此该结构sockaddr_un的sizeof与sockaddr_in。但是如果他们想避免与其他sizeof值发生冲突,为什么不使用素数呢?有人可以为此提供权威来源吗? 最佳答案 这是为了匹配方便的内核数据结构中的可用空间。编辑:引用McKusick等人的“4.4BSD操作系统的设计与实现”。阿尔。(第369页):Thememory

c - 为什么 linux 108 上的 unix-sockets 允许最大路径长度?

创建unix套接字时,路径名(man7unix)允许最长为108个字符。对于一个friend来说,这导致他的程序出现错误,因为他的路径更长。现在我们想知道这个数字究竟是如何确定的。我怀疑这个数字是确定的,因此该结构sockaddr_un的sizeof与sockaddr_in。但是如果他们想避免与其他sizeof值发生冲突,为什么不使用素数呢?有人可以为此提供权威来源吗? 最佳答案 这是为了匹配方便的内核数据结构中的可用空间。编辑:引用McKusick等人的“4.4BSD操作系统的设计与实现”。阿尔。(第369页):Thememory

c - C 中 write(2) 的返回值 0 是错误吗?

在系统调用的手册页中write(2)-ssize_twrite(intfd,constvoid*buf,size_tcount);内容如下:ReturnValueOnsuccess,thenumberofbyteswrittenarereturned(zeroindicatesnothingwaswritten).Onerror,-1isreturned,anderrnoissetappropriately.Ifcountiszeroandthefiledescriptorreferstoaregularfile,0maybereturned,oranerrorcouldbedetec

c - C 中 write(2) 的返回值 0 是错误吗?

在系统调用的手册页中write(2)-ssize_twrite(intfd,constvoid*buf,size_tcount);内容如下:ReturnValueOnsuccess,thenumberofbyteswrittenarereturned(zeroindicatesnothingwaswritten).Onerror,-1isreturned,anderrnoissetappropriately.Ifcountiszeroandthefiledescriptorreferstoaregularfile,0maybereturned,oranerrorcouldbedetec

c - 如何让系统调用 write() 打印到屏幕上?

对于我的操作系统类,我应该只使用系统调用(没有printf)来实现Linux的cat阅读thisreference我发现它被用来打印到一个文件。我想我应该操纵ofstream。例子中出现:ofstreamoutfile("new.txt",ofstream::binary);如何让它写入屏幕?编辑:我意识到这个write()是iostream库的一部分,这与intwrite(intfd,char*buf,intsize)系统调用相同吗? 最佳答案 系统调用是Linux内核提供的一种服务。在C编程中,函数在libc中定义,它为许多系统

c - 如何让系统调用 write() 打印到屏幕上?

对于我的操作系统类,我应该只使用系统调用(没有printf)来实现Linux的cat阅读thisreference我发现它被用来打印到一个文件。我想我应该操纵ofstream。例子中出现:ofstreamoutfile("new.txt",ofstream::binary);如何让它写入屏幕?编辑:我意识到这个write()是iostream库的一部分,这与intwrite(intfd,char*buf,intsize)系统调用相同吗? 最佳答案 系统调用是Linux内核提供的一种服务。在C编程中,函数在libc中定义,它为许多系统

c - 'write' 函数的正确缓冲区大小是多少?

我在我的代码(Linux上的C语言)中使用低级I/O函数“write”将一些数据写入磁盘。首先,我将数据累积在内存缓冲区中,然后在缓冲区已满时使用“write”将数据写入磁盘。那么“写入”的最佳缓冲区大小是多少?根据我的测试,并不是越大越快,所以我来这里寻找答案。 最佳答案 写入文件系统block大小的倍数可能有一些优势,特别是如果您正在就地更新文件。如果您向文件写入的内容少于部分block,则操作系统必须读取旧block,合并新内容,然后将其写出。如果您按顺序快速写入小块,则不一定会发生这种情况,因为更新将在稍后刷新的内存缓冲区上

c - 'write' 函数的正确缓冲区大小是多少?

我在我的代码(Linux上的C语言)中使用低级I/O函数“write”将一些数据写入磁盘。首先,我将数据累积在内存缓冲区中,然后在缓冲区已满时使用“write”将数据写入磁盘。那么“写入”的最佳缓冲区大小是多少?根据我的测试,并不是越大越快,所以我来这里寻找答案。 最佳答案 写入文件系统block大小的倍数可能有一些优势,特别是如果您正在就地更新文件。如果您向文件写入的内容少于部分block,则操作系统必须读取旧block,合并新内容,然后将其写出。如果您按顺序快速写入小块,则不一定会发生这种情况,因为更新将在稍后刷新的内存缓冲区上