- 浏览: 146593 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lyaqys:
lz实现的OptimisticExclusiveLock有点问 ...
java park/unpark 【java并发】基于JUC CAS原理,自己实现简单独占锁
nginx 就是使用了父子进程 共享端口,所以nginx快速这个也算一个原因
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int sfp,nfp;
struct sockaddr_in s_add,c_add;
int sin_size;
unsigned short portnum=8888;
printf("Hello,welcome to my server !\r\n");
sfp = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == sfp)
{
printf("socket fail ! \r\n");
return -1;
}
printf("socket ok !\r\n");
bzero(&s_add,sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=htonl(INADDR_ANY);
s_add.sin_port=htons(portnum);
if(-1 == bind(sfp,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("bind fail !\r\n");
return -1;
}
printf("bind ok !\r\n");
if(-1 == listen(sfp,5))
{
printf("listen fail !\r\n");
return -1;
}
printf("listen ok\r\n");
fork();
while(1)
{
sin_size = sizeof(struct sockaddr_in);
nfp = accept(sfp, (struct sockaddr *)(&c_add), &sin_size);
printf("\t\t\t\t\t\tprocess is %ld\n",(long)getpid());
if(-1 == nfp)
{
printf("accept fail !\r\n");
return -1;
}
printf("accept ok!\r\nServer start get connect from %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
if(-1 == write(nfp,"hello,welcome to my server \r\n",32))
{
printf("write fail!\r\n");
return -1;
}
printf("write ok!\r\n");
close(nfp);
}
close(sfp);
return 0;
}
客户端
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int cfd;
int recbytes;
int sin_size;
char buffer[1024]={0};
struct sockaddr_in s_add,c_add;
unsigned short portnum=8888;
printf("Hello,welcome to client !\r\n");
cfd = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == cfd)
{
printf("socket fail ! \r\n");
return -1;
}
printf("socket ok !\r\n");
bzero(&s_add,sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr= inet_addr("127.0.0.1");
s_add.sin_port=htons(portnum);
printf("s_addr = %#x ,port : %#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);
if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("connect fail !\r\n");
return -1;
}
printf("connect ok !\r\n");
if(-1 == (recbytes = read(cfd,buffer,1024)))
{
printf("read data fail !\r\n");
return -1;
}
printf("read ok\r\nREC:\r\n");
buffer[recbytes]='\0';
printf("%s\r\n",buffer);
getchar();
close(cfd);
return 0;
}
分别多次运行客户端,可以发现显示的进程号是不同的
Hello,welcome to my server !
socket ok !
bind ok !
listen ok
process is 3277
accept ok!
Server start get connect from 0x7f000001 : 0xc67d
write ok!
process is 3278
accept ok!
Server start get connect from 0x7f000001 : 0xc681
write ok!
process is 3277
accept ok!
Server start get connect from 0x7f000001 : 0xc682
write ok!
process is 3278
accept ok!
Server start get connect from 0x7f000001 : 0xc683
write ok!
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int sfp,nfp;
struct sockaddr_in s_add,c_add;
int sin_size;
unsigned short portnum=8888;
printf("Hello,welcome to my server !\r\n");
sfp = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == sfp)
{
printf("socket fail ! \r\n");
return -1;
}
printf("socket ok !\r\n");
bzero(&s_add,sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=htonl(INADDR_ANY);
s_add.sin_port=htons(portnum);
if(-1 == bind(sfp,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("bind fail !\r\n");
return -1;
}
printf("bind ok !\r\n");
if(-1 == listen(sfp,5))
{
printf("listen fail !\r\n");
return -1;
}
printf("listen ok\r\n");
fork();
while(1)
{
sin_size = sizeof(struct sockaddr_in);
nfp = accept(sfp, (struct sockaddr *)(&c_add), &sin_size);
printf("\t\t\t\t\t\tprocess is %ld\n",(long)getpid());
if(-1 == nfp)
{
printf("accept fail !\r\n");
return -1;
}
printf("accept ok!\r\nServer start get connect from %#x : %#x\r\n",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
if(-1 == write(nfp,"hello,welcome to my server \r\n",32))
{
printf("write fail!\r\n");
return -1;
}
printf("write ok!\r\n");
close(nfp);
}
close(sfp);
return 0;
}
客户端
#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int cfd;
int recbytes;
int sin_size;
char buffer[1024]={0};
struct sockaddr_in s_add,c_add;
unsigned short portnum=8888;
printf("Hello,welcome to client !\r\n");
cfd = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == cfd)
{
printf("socket fail ! \r\n");
return -1;
}
printf("socket ok !\r\n");
bzero(&s_add,sizeof(struct sockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr= inet_addr("127.0.0.1");
s_add.sin_port=htons(portnum);
printf("s_addr = %#x ,port : %#x\r\n",s_add.sin_addr.s_addr,s_add.sin_port);
if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
{
printf("connect fail !\r\n");
return -1;
}
printf("connect ok !\r\n");
if(-1 == (recbytes = read(cfd,buffer,1024)))
{
printf("read data fail !\r\n");
return -1;
}
printf("read ok\r\nREC:\r\n");
buffer[recbytes]='\0';
printf("%s\r\n",buffer);
getchar();
close(cfd);
return 0;
}
分别多次运行客户端,可以发现显示的进程号是不同的
Hello,welcome to my server !
socket ok !
bind ok !
listen ok
process is 3277
accept ok!
Server start get connect from 0x7f000001 : 0xc67d
write ok!
process is 3278
accept ok!
Server start get connect from 0x7f000001 : 0xc681
write ok!
process is 3277
accept ok!
Server start get connect from 0x7f000001 : 0xc682
write ok!
process is 3278
accept ok!
Server start get connect from 0x7f000001 : 0xc683
write ok!
发表评论
-
c语言链表实现学生管理
2013-10-28 14:13 867#include<stdio.h> #includ ... -
简单的linux -c http-client
2013-10-23 15:35 4669#include<stdio.h> #includ ... -
毗连“"aa"”和“"bb"”不能给出一个有效的预处理标识符,gcc编译错误表
2013-10-01 18:54 2864gcc bug : ##’ cannot appear at ... -
负数转化为整数
2013-10-01 12:02 1293负数转化为整数 int a = -1321313; 12 ... -
STDIN_FILENO的作用及与stdin 的区别
2013-09-08 14:48 863if(NULL == fgets(msg,100,stdi ... -
linux进程cpu资源分配命令nice,renice,taskset
2013-09-04 14:03 1130nice,renice 指定进程运行的优先级 taskset ... -
c++ 动态内存分配
2013-08-28 22:35 783先看一段代码: [cpp] view plaincopy ... -
文件结束符EOF,system("stty raw")
2013-08-14 10:47 1506>> 关于文件结束符EOF EOF 是 End O ... -
c 专家编程
2013-08-13 17:06 654总结: -2> int * a = NUL ... -
Linux中线程与CPU核的绑定
2013-08-09 15:15 2087最近在对项目进行性能 ... -
建议编译的时候加警告 atof
2013-08-07 20:46 670#include <stdlib.h> ... -
feodra 17 安装 chrome
2013-08-04 01:35 7241: 下载:http://www.google.cn/chro ... -
Sudo提权出现:xx用户不在 sudoers 文件中
2013-08-03 20:22 872Sudo提权出现:xx用户不在 sudoers 文件中 症状 ... -
c语言api
2013-07-31 21:06 640原型:extern int isalnum(int c); 用 ... -
c 语言无符号类型使用注意,类型升级
2013-07-30 14:37 589#define SS sizeof(int) 5 int ... -
select,epoll,poll比较
2013-07-28 17:13 651select,poll,epoll简介 se ... -
gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数
2013-07-22 22:45 852我们用gcc编译程序时,可能会用到“-I”(大写i),“-L” ... -
Linux下如何将进程绑定在特定的CPU上运行
2013-07-22 10:52 950Linux下如何将进程绑定在特定的CPU上运行? 以root用 ... -
linux运维常用命令
2013-07-13 20:40 808推荐一个实用命令:awk '{x+=$2} END {prin ... -
linux 进程通信方式
2013-07-07 20:46 589# 管道( pipe ):管道是一种半双工的通信方式,数据只能 ...
相关推荐
父子进程之间的共享内存,父子之间的互相通信。
dLinux进程创建与进程通信,实现父进程创建一个子进程,返回后父子进程分别循环输出字符串“The parent process.”及“The child process.”5次,每次输出后使用sleep(10)延时10秒,然后再进入下一次循环。...
qt使用QProcess实现父子进程通信
linux父子进程同步及进程通讯,恰同学少年,风华正茂,挥斥方遒
ARM LINUX 进程间通讯 共享内存 ;可以实现多个不同程序通讯而不是仅仅实现父子进程通讯!
操作系统进程创建父子进程实验报告.pdf
linux C语言,编程实现父子进程同时拷贝文件,各复制一半
Linux进程控制编程-父子进程对数据段的访问实例.pdf 学习资料 复习资料 教学资源
Experiment03_父子进程同步与子进程重载(Linux)
QT父子进程间通讯,父进程通过writeData发送数据,子进程通过读取标准输入获取数据。
在vc环境下创建父子进程,显示存活时间,平均时间,
利用该系统调用能够遍历系统当前所有进程的任务描述符,并按进程父子关系将这些描述符所对应的进程id(PID)组织成树形结构显示。 实验环境: Ubuntu 20.04.03 LTS,Kernel Version 5.13.0(截至2022年2月18日Ubuntu...
1. 熟悉有关Linux系统调用; 2. 学习有关Linux的进程创建,理解进程创建后两个并发进程的执行;...3. 通过系统调用wait()和exit(),实现父子进程同步; 4. 掌握管道、消息缓冲等进程通信方法并了解其特点和使用限制。
UNIX下C语言实现父子进程通信,通过管道实现
本代码已经通过实际测试,代码运行良好,无bug。在Linux内核中增加一个系统调用,并...利用该系统调用能够遍历系统当前所有进程的任务描述符,并按进程父子关系将这些描述符所对应的进程id(PID)组织成树形结构显示。
操作系统进程创建父子进程实验报告.docx
2、 编写一段程序,使用管道实现父子进程之间的通信 a) 使用系统调用fork()创建一个子进程 b) 子进程调用函数write()向父进程发送自己的进程ID和字符串” s sending a message to parent.\n”。 c) 父进程调用函数...
包含图形界面的父子进程通信源代码,包括共享消息,文件映射,消息通信。
操作系统实验二:进程通信机制的应用实验报告。加深对于进程并发执行概念的理解。...掌握进程控制的方法,了解父子进程间的控制和协作关系。练习 Linux 系统中进/线程创建与控制有关的系统调用的编程和调试技术。