随笔分类 - linux C编程实战
书籍学习
升级libstdc++、libgcc_s.so、libc.so.6
摘要:参考资料:https://blog.csdn.net/ltl451011/article/details/7763892/ https://blog.csdn.net/na_beginning/article/details/53413997 一、为什么要升级? 有时候在链接外部动态库的时候,会出以
阅读全文
僵尸进程
摘要:参考:https://www.zhihu.com/question/26432067https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fr=aladdin由于子进程的结束和父进程的运行是一个异步过程,即
阅读全文
套接字编程,建立连接connect,绑定套接字bind
摘要:1、建立连接 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数sockfd是由函数socket创建的套接字。如果该套接字的类型是SOCK_STREAM,则connect函数用于向服务器发出 连接请求
阅读全文
套接字编程,创建套接字socket
摘要:1、套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对应于TCP/IP协议该值为AF_INET;成员sa_data存储具体的协议地址。 sa_data之所
阅读全文
网络编程基本原理
摘要:1、网络模型与协议 。。。。。。。。。。。。 2、地址 为了使网络上的计算机能进行相互通信,必须有一个唯一的标识来区分网络上每台计算机。 两种标识可以使用: (1)物理地址 对于以太网来说,物理地址就是一个48位的位串,此地址在网卡的生产过程中就已经固定了,是不可更改的,并且是全球唯一的。 使用指令
阅读全文
进一步学习的书籍
摘要:前面介绍了: 1、文件和目录的操作 2、进程、线程的控制 3、信号的使用 4、进程间通信 《unix环境高级编程》 W.Richard Stevens 《Solaris系统编程》Rich Teer。Solaris是一种unix操作系统。该书详细描述了系统编程接口,以大量的案例, 代码和图示解释如何使
阅读全文
动态、静态库的创建和使用
摘要:1、linux库的概念 库是一种软件组件技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,提高程序的编译速度, 实现代码重用,使程序易于升级。因此,对于软件开发人员,掌握这项技术是十分必要的。window系统本身提供并使用了大量的库, 包括静态链接库(.lib)和动态链接库
阅读全文
共享内存创建shmget控制操作shmat,shmctl
摘要:1、共享内存的数据结构 共享内存就是分配一块能被其他进程访问的内存。每个共享内存段在内核中维护着一个内部结构: struct shmid_ds { struct ipc_perm shm_perm; /* Ownership and permissions */ size_t shm_segsz;
阅读全文
信号量的基本概念与使用semget,semop
摘要:1、信号量的基本概念 信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源的同步访问。 临界资源可以简单的理解为在某一时刻只能由一个进程或线程进行操作的资源,这里的资源 可以是一段代码、一个变量或某种硬件资源。信号量的值大于或等于0时表示可供并发进程使用的 资源实体数;小于0时代表正
阅读全文
消息队列的创建与读写ftok,msgget,msgsnd,msgrcv,指令ipcs,ipcrm 查看,删除消息队列
摘要:ipcs是Linux下显示进程间通信设施状态的工具。可以显示消息队列、共享内存和信号量的信息。对于程序员非常有用,普通的系统管理员一般用不到此指令。 ipcs -q 查看系统使用的IPC队列资源 ipcs -m 查看系统使用的IPC共享内存资源 ipcs -s 查看系统使用的IPC信号量资源 ipc
阅读全文
获取和设置消息队列的属性msgctl,删除消息队列
摘要:消息队列的属性保存在系统维护的数据结构msqid_ds中,用户可以通过函数msgctl获取或设置消息队列的属性。 int msgctl(int msqid, int cmd, struct msqid_ds *buf); msgctl:系统调用对msgqid标识的消息队列执行cmd操作,系统定义了3
阅读全文
消息队列的基本概念
摘要:消息队列是一个存放在内核中的消息链表,每个消息队列由消息队列标识符标识。与管道不同的是消息队列存放在内核中, 只有在内核重启(即操作系统重启)或者显式地删除一个消息队列时,该消息队列才会被真正删除。 几个重要的数据结构: 在文件/usr/include/linux/msg.h中 1、消息缓冲结构:
阅读全文
有名管道的应用实例,创建两个有名管道实现全双工通信,两个进程间的聊天
摘要:创建两个有名管道来实现不同进程间的全双工通信。 两个进程聊天程序:一个server端,一个client端。 例子用到了read函数: read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都
阅读全文
有名管道mkfifo
摘要:int mkfifo(const char *pathname, mode_t mode); int mknod(const char *pathname, mode_t mode, dev_t dev); 管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信。 在有名管道(name
阅读全文
管道pipe与dup结合使用,应用实例
摘要:管道的一种常见用法:在父进程创建子进程后向子进程传递参数。例如,一个应用软件有一个主进程和很多个不同子进程。 主进程创建子进程后,在子进程调用exec函数执行一个新程序前,通过管道给即将执行的程序传递命令行参数,子进程根据传来 的参数进行初始化或其他操作。 大致思路: The child can t
阅读全文
管道pipe与dup结合使用
摘要:前面的例子中,子进程可以直接共享父进程的文件描述符。但是如果子进程调用exec函数执行另一个应用程序时,就不能再共享了。 这种情况下可以将子进程中的文件描述符重定向到标准输入,当新执行的程序从标准输入获取数据时实际上是从父进程中获取输入数据。 dup和dup2函数提供了复制文件描述符的功能。 int
阅读全文
管道的创建与读写-创建两个管道来实现一个全双工通信
摘要:管道是半双工的(一端只能读不能写,一端只能写不能读),但是可以通过创建两个管道来实现一个全双工(两端都可以读写)通信。 示例代码:
阅读全文
管道的创建与读写pipe
摘要:1、管道的创建 #include <unistd.h> int pipe(int pipefd[2]); linux下创建管道可以通过函数pipe来完成。该函数如果调用成功,数组中将包含两个新的文件描述符。 管道两端可分别用描述符fd[0] 以及fd[1]来描述。需要注意的是,管道两端的任务是固定的
阅读全文
进程通信方式-管道pipe
摘要:管道是两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称之为半双工管道。 1、数据只能从一个进程流向另一个进程(其中一个写管道,另一个读管道);如果要进行全双工通信,需要建立两个管道。 2、管道只能用于父子进程或者兄弟进程间的通信,也就是说管道只能用于具有亲缘关系的进程间的通信,无亲缘
阅读全文
浙公网安备 33010602011771号