C发送套接字而不定义套接字
这行代码的作用是什么C发送套接字而不定义套接字,c,linux,sockets,C,Linux,Sockets,这行代码的作用是什么 send(4, "test\n", 15, 0); 如果代码中没有定义套接字?它可能会失败,并出现EBADF错误(在errno中) 有关更多可能的错误值,请参阅 请注意,如果前面有代码设置一个硬编码描述符值为4(第一个参数)的套接字,则它可能会成功。请参阅函数以了解尝试执行此操作的一种方法 还请注意,它可能是执行该设置的父进程,因此它甚至可能在源文件中不可见,而只是静默地假定 最后,请注意由于在提供的缓冲区之外读取而导致的未定义行为(字符串长度不是15个字符)。这是非常可
send(4, "test\n", 15, 0);
如果代码中没有定义套接字?它可能会失败,并出现
EBADF
错误(在errno
中)
有关更多可能的错误值,请参阅
请注意,如果前面有代码设置一个硬编码描述符值为4
(第一个参数)的套接字,则它可能会成功。请参阅函数以了解尝试执行此操作的一种方法
还请注意,它可能是执行该设置的父进程,因此它甚至可能在源文件中不可见,而只是静默地假定
最后,请注意由于在提供的缓冲区之外读取而导致的未定义行为(字符串长度不是15个字符)。这是非常可疑的代码。它可能会失败,并出现
EBADF
错误(在errno
中)
有关更多可能的错误值,请参阅
请注意,如果前面有代码设置一个硬编码描述符值为4
(第一个参数)的套接字,则它可能会成功。请参阅函数以了解尝试执行此操作的一种方法
还请注意,它可能是执行该设置的父进程,因此它甚至可能在源文件中不可见,而只是静默地假定
最后,请注意由于在提供的缓冲区之外读取而导致的未定义行为(字符串长度不是15个字符)。这是一个非常可疑的代码。有没有办法在一个单独的文件中创建套接字并使其工作?@h00j,我想更灵活的方法是使用一些命令发送套接字描述符。这是因为分配给套接字的描述符每次都可能更改。如果你的代码是硬编码的,那么你的代码就被破坏了。它也可能因SIGSEGV而失败,这取决于是否映射了文本以外的9字节内存。即使它完全成功,它也会发送9字节的垃圾。有没有办法在一个单独的文件中创建套接字并使其工作?@h00j,我想更灵活的方法是使用一些文件发送套接字描述符。这是因为分配给套接字的描述符每次都可能更改。如果你的代码是硬编码的,那么你的代码就被破坏了。它也可能因SIGSEGV而失败,这取决于是否映射了文本以外的9字节内存。即使它完全成功,它也会发送9个字节的垃圾。该行尝试发送(2)6个字节的
't'
,'e'
,'s'
,'t'
,'\n'
,'\0'
,然后是接下来的9个连续字节,不管它们是什么,都发送到文件描述符4,不管它们是什么。具体来说,您在问什么?那么文件描述符4是/dev/fd/4?当我将其设置为:exec 4 testfd时,它不会写入它。该行尝试发送(2)六个字节't'
,'e'
,'s'
,'t'
,'\n'
,'\0'
,然后将接下来的九个连续字节,不管它们是什么,发送到文件描述符4,不管它们是什么。具体来说,您在问什么?那么文件描述符4是/dev/fd/4?当我将它设置为:exec 4 testfd时,它不会写入它。