我是socketpairs的新手,我需要我的孩子將每個信息從一個結構傳遞給parent.I被告知這可以使用SOCK_DGRAM完成,但我不知道該怎麼做。看看互聯網,但我找不到一個具體的例子。可以請你舉個例子鋤頭,你可以傳給父母一個由2個整數和一個字符串組成的結構嗎?我只是想要一個例子,所以我可以理解我可以建立這種socketpair,並通過it.Thank你linux fork socketpair sock_dgram
0
A
回答
1
如何以下發送信息:
int sockets[2];
if (socketpair(AF_INET, SOCK_DGRAM, 0, sockets) != -1)
{
int res = fork();
if (res == 0)
{
/* In child process */
/* We only need one socket, so close the other */
close(sockets[0]);
struct some_structure my_struct;
write(sockets[1], &my_struct, sizeof(my_struct));
/* All done */
exit(0);
}
else if (res > 0)
{
/* In parent process */
/* We only need one socket, so close the other */
close(sockets[1]);
struct some_structure my_struct;
read(sockets[0], &my_struct, sizeof(my_struct));
}
}
上面的代碼不檢查或處理,錯誤。它不能處理包含指針的結構,但是使用數組的結構也可以。
0
假設你的字符串表示爲char*
在
struct data {
int i, j;
char *s;
};
你需要制定一些序列化格式,因爲發送指針將無法正常工作;指針對象不會被傳遞,因此它不會指向接收者(父對象)中的任何有用內容。一個簡單的格式將是把整數終端到終端,然後直接追加包括其NUL終結符,所以你會得到
int senddata(int fd, struct data const *d)
{
size_t msglen = 2 * sizeof(int) + strlen(d->s) + 1;
char *msg = malloc(msglen);
if (msg == NULL)
return -1;
((int *)msg)[0] = d->i;
((int *)msg)[1] = d->j;
strcpy(msg + 2 * sizeof(int), d->s);
ssize_t r = send(fd, msg, msglen, 0);
free(msg);
return r;
}
有相應的接收功能父。您可能希望在字符串上放置一些最大長度,因爲父級需要事先知道消息的大小。
相關問題
- 1. 爲什麼socketpair()允許SOCK_DGRAM類型?
- 2. fork()和在Linux
- 3. Fork()linux問題
- 4. linux fork通信
- 5. fork,execlp在Linux中
- 6. linux中fork()函數
- 7. linux fork()進程問題
- 8. Linux的fork()的命令
- 9. C/C++ linux fork()和exec()
- 10. C++,linux,fork,execvp,waitpid和SIGTSP
- 11. Linux Fork進程終止
- 12. socket()和socketpair()的域參數
- 13. 如何知道sockatpair的SOCK_DGRAM對等套接字何時關閉?
- 14. Linux中fork()的名稱的含義
- 15. C++調用linux命令fork childs
- 16. C靜態變量和linux fork
- 17. linux中的fork()系統調用
- 18. 使用execl和fork創建linux環境()
- 19. SOCK_DGRAM支持未絞線
- 20. fork()內fork()
- 21. 在C中使用fork管道兩次使用linux linux
- 22. socketpair()在工作套接字的close()後創建新的子進程
- 23. Overloading fork()
- 24. socketpair api界面的典故是什麼?
- 25. 使用socketpair時SO_SNDBUF的行爲
- 26. Python:AttributeError:'模塊'對象沒有屬性'socketpair'
- 27. 插座(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)在C語言NDK
- 28. 奇怪的東西 - SOCK_DGRAM和SOCK_STREAM?
- 29. 套接字(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)失敗,errno = 13(權限被拒絕)
- 30. socketpair和一對未命名的管道是否有區別?
'struct'包含一個字符串。如果這是'char *',這將發送一個沒有內容的指針。 –
@Joachim Pileborg非常感謝你我會嘗試 –
@EmilGrigore在Linux等POSIX系統中,套接字與創建和連接後的任何其他文件描述符沒有多大區別。您可以像讀取任何其他文件一樣讀取和寫入它們。 –