Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C发送套接字而不定义套接字_C_Linux_Sockets - Fatal编程技术网

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时,它不会写入它。