亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2635 | 回復(fù): 6
打印 上一主題 下一主題

讀寫socket描述符過程中調(diào)用system()會中斷連接? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-11-17 19:56 |只看該作者 |倒序?yàn)g覽
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <sys/mman.h>
  7. #include <fcntl.h>

  8. #define MAXLINE                80
  9. #define SERV_PORT        8000

  10. int
  11. main(int argc, char *argv[])
  12. {
  13.         struct sockaddr_in        servaddr, cliaddr;
  14.         socklen_t                cliaddr_len;
  15.         int                        listenfd, connfd;
  16.         char                        buf[MAXLINE];
  17.         char                        str[INET_ADDRSTRLEN];
  18.         int                        i, n;

  19.         listenfd = socket(AF_INET, SOCK_STREAM, 0);
  20.         if (listenfd == -1) {
  21.                 perror("socket");       
  22.                 exit(1);
  23.         }

  24.         bzero(&servaddr, sizeof(servaddr));
  25.         servaddr.sin_family = AF_INET;
  26.         servaddr.sin_port = htons(SERV_PORT);
  27.         servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  28.         if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
  29.                 perror("bind");       
  30.                 exit(1);
  31.         }

  32.         if (listen(listenfd, 20) == -1) {
  33.                 perror("listen");       
  34.                 exit(1);
  35.         }

  36.         printf("Accepting connections ...\n");
  37.         while (1) {
  38.                 cliaddr_len = sizeof(cliaddr);
  39.                 connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len);
  40.                 if (connfd == -1) {
  41.                         perror("accept");       
  42.                         exit(1);
  43.                 }

  44.                 n = read(connfd, buf, MAXLINE);

  45.                 for (i = 0; i < n; i++)
  46.                         buf[i] = toupper(buf[i]);
  47.                 system("ls");
  48.                 write(connfd, buf, n);
  49.                             [color=Red]system("ls");[/color]
  50.                 write(connfd, "@", 1);
  51.                 write(connfd, "stopping@", 9);

  52.                 close(connfd);
  53.         }

  54.         exit(0);
  55. }
復(fù)制代碼
有時(shí)候會中斷連接,有時(shí)候client收到的信息會不全。是因?yàn)閟ystem()會fork+exec嗎?那又想在socket其中執(zhí)行一條命令該怎么做呢?問題比較弱,請各位指點(diǎn)一二。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-11-17 22:44 |只看該作者
你把客戶端的代碼也貼上

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-11-17 22:51 |只看該作者
include 都沒有 include 全啊

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-11-18 08:38 |只看該作者
你把客戶端的代碼也貼上
caiyijun1987 發(fā)表于 2011-11-17 22:44
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <fcntl.h>

  8. #define MAXLINE                80
  9. #define SERV_PORT        8000

  10. int
  11. main(int argc, char *argv[])
  12. {
  13.         struct sockaddr_in        servaddr;
  14.         int                        sockfd;
  15.         char                        buf[MAXLINE];       
  16.         int                        n;

  17.         if (argc != 2) {
  18.                 fprintf(stderr, "Usage: %s message\n", argv[0]);       
  19.                 exit(1);
  20.         }

  21.         sockfd = socket(AF_INET, SOCK_STREAM, 0);
  22.         if (sockfd == -1) {
  23.                 perror("socket");       
  24.                 exit(1);
  25.         }

  26.         bzero(&servaddr, sizeof(servaddr));
  27.         servaddr.sin_family = AF_INET;
  28.         servaddr.sin_port = htons(SERV_PORT);
  29.         inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
  30.         if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
  31.                 perror("connect");       
  32.                 exit(1);
  33.         }

  34.         write(sockfd, argv[1], strlen(argv[1]));
  35.         n = read(sockfd, buf, MAXLINE);
  36.         printf("Response from server:\n");
  37.         write(STDOUT_FILENO, buf, n);
  38.         close(sockfd);

  39.         exit(0);
  40. }
復(fù)制代碼

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
5 [報(bào)告]
發(fā)表于 2011-11-18 10:18 |只看該作者
和system 無關(guān), read 不保證讀完

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-11-18 11:36 |只看該作者
和system 無關(guān), read 不保證讀完
zylthinking 發(fā)表于 2011-11-18 10:18



一般read都是自己寫函數(shù)吧,比如readn并判斷errno,是不是這樣~~

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
7 [報(bào)告]
發(fā)表于 2011-11-18 11:42 |只看該作者
差不多
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP