`
haoningabc
  • 浏览: 1483045 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fork socket注意缓冲区

 
阅读更多
读coolshell最近的篇文章
http://coolshell.cn/articles/7965.html
一个fork的面试题,有感

http为啥要有个头呢,因为头记录了一些信息
比如长度
有了长度,c的代码才好控制,设置buffer的长度,
否则就会造成这个fork的时候,把没输出的缓冲也复制的状况

还有就是socked的时候
没有\n,导致本来应该多次输出的变成单行输出
参考《linux高级程序设计》第五章的badserver,
在这
http://haoningabc.iteye.com/blog/1616472


缓冲缓冲缓冲缓冲缓冲缓冲缓冲缓冲缓冲
头的作用之一就是标记缓冲啊
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-");
   }
 
   return 0;
}


#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      //注意:下面的printf有“\n”
      printf("ppid=%d, pid=%d, i=%d \n", getppid(), getpid(), i);
   }
   sleep(10); //让进程停留十秒,这样我们可以用pstree查看一下进程树
   return 0;
}


pstree -p | grep fork
分享到:
评论

相关推荐

    socket编程入门(经典版

    在发送数据时,可以通过设置适当的缓冲区大小来优化数据传输效率。 ##### 2.3 把client改为交互式输入 为了让客户端更加灵活,可以将其改为通过用户输入的方式与服务器进行交互。这种方式使得客户端能够根据用户的...

    linux C socket编程 — 面向连接实例

    4. **接收数据**:`recv()`函数用于从服务器接收数据,将其保存在`buf`缓冲区中。 5. **处理数据**:接收到数据后,客户端可以进行相应的处理,例如打印或进一步处理。 6. **关闭连接**:完成数据交换后,客户端也...

    socket编程和网络编程

    Emacs则以其独特的缓冲区概念和丰富的功能著称,支持多语言编程,并提供图形化菜单界面。 2. **Socket编程** Socket是网络通信的基础,它提供了进程间的通信能力,特别是在网络环境中。在Linux下,我们使用`...

    管道和socket编程.docx

    - 通过`write(fd[1], buffer, size)`向管道写入数据,其中`buffer`是要发送的数据缓冲区,`size`是缓冲区中的字节数。 - 使用`read(fd[0], buffer, size)`从管道读取数据,其中`buffer`是接收数据的缓冲区,`size`...

    系统调用——

    例如,`fork()`用于创建新进程,`execve()`用于加载新的程序到内存执行,`wait()`则用于等待子进程结束。 2. 文件操作:这些系统调用涉及文件的打开、关闭、读取、写入和定位。例如,`open()`用于打开文件,`read()...

    linuxcsocket.pdf

    send()函数将数据从缓冲区发送到另一端,而recv()函数从另一端接收数据到缓冲区。 3. 通过Telnet测试:客户端使用Telnet命令连接到服务器端口,并测试通信是否正常。 网络工具的使用: 1. gcc编译器:使用gcc...

    浅谈C#网络编程详解篇

    为了优化服务器性能,可以设置Socket的缓冲区大小、超时时间等选项,还可以利用IO Completion Ports (IOCP)或epoll等高级特性,提高并发处理能力。 总结,C#网络编程涉及Socket的创建、连接管理、多线程并发以及IO...

    用多进程同步方法解决生产者-消费者问题

    在Linux中,可以使用`fork()`函数创建新的进程,`pipe()`或`socketpair()`实现进程间通信。 7. **进程间通信(IPC)**:在多进程环境中,进程之间需要通过某种方式交换信息。在生产者-消费者问题中,可以使用管道、...

    华清期中考试

    5. **消费者读缓冲区后操作**:读取数据后,同样通过`sem_post()`增加信号量计数器的值,释放缓冲区资源供其他进程使用。 6. **销毁信号量**:使用`sem_destroy()`函数销毁信号量。 以上就是针对华清嵌入式Linux...

    c/c++底层通讯函数源码

    它们接受Socket句柄、数据缓冲区指针、要发送的字节数以及可选的发送标志作为参数。`send()`函数在TCP中可以保证数据的顺序,而在UDP中则不保证。 **接收函数**如`recv()`或`read()`,用于从Socket接收数据。它们...

    unix网络编程 江西师范大学课件

    总的来说,Unix网络编程涉及到深入理解TCP/IP协议栈、套接字接口、并发处理、缓冲区管理和地址转换等多个方面,是构建高效、可靠的网络服务的基础。通过学习这样的课件,开发者能够掌握创建和维护网络连接的关键技术...

    Linux上实现双向进程间通信管道-zxg623-ChinaUnix博客1

    此外,由于`socketpair`使用的是套接字,它还支持更丰富的特性,如缓冲区大小的设置、连接状态的检查等,这使得它在某些复杂场景下更具优势。 总结来说,Linux的`socketpair`系统调用是实现双向进程间通信的有效...

    一个C语言实现的 Http Server.zip

    8. **缓冲区管理**:为了提高效率,服务器可能需要使用缓冲区来暂存数据。理解如何正确使用缓冲区,避免缓冲区溢出是必要的。 9. **性能优化**:学习如何通过优化代码结构、减少系统调用、复用套接字等方式提高...

    unix网络编程(卷一)源码

    源码中可能会包含缓冲区的动态分配、复制、清空等操作,以及缓冲区满和空的检查策略。 7. **网络地址和套接字描述符的转换**:`gethostbyname()`, `getaddrinfo()`等函数用于解析主机名和IP地址,而`sockaddr`...

    Linux应用系统开发及系统调试.txt

    - **缓冲区管理**:了解如何控制缓冲区大小、何时刷新缓冲区等。 - **同步与异步IO**:比较两种IO模式的特点及适用场景。 - **锁机制**:第25至27讲重点讲述了锁的概念和使用方法,包括互斥锁、读写锁、自旋锁等...

    一个用C语言写的小聊天室

    C语言的stdio库提供了缓冲区管理的函数,如printf/scanf系列,也可以自定义缓冲区来优化数据传输效率。 5. **字符串处理**:在聊天室中,用户输入和输出都是字符串形式。C语言提供了strcat、strcpy、strcmp等字符串...

    东北大学(China)操作系统四次实验的代码.zip

    在操作系统中,这通常通过缓冲区实现,生产者填充缓冲区,而消费者从中消费。学生会学习如何使用条件变量、信号量等同步原语来解决这个问题,防止数据竞争和死锁的发生。 3. 实验三:父子进程 这个实验专注于进程...

    Linux进程间通信之管道

    3. 父进程向管道的write-end写入数据,这些数据被存放在内核的缓冲区中。 4. 子进程从管道的read-end读取数据,直到缓冲区为空。 管道的一个关键特性是先进先出(FIFO),这意味着第一个写入的数据将被第一个读取。...

    油槽实现简易会议发布系统

    2. **管道缓冲区**:油槽内部有一个固定的缓冲区,用于存储待传输的数据。如果写入的数据量超过缓冲区大小,会导致数据丢失。 3. **非阻塞与阻塞**:读写操作可能会遇到无数据可读或无空间可写的情况,此时可以选择...

Global site tag (gtag.js) - Google Analytics