【关于unix环境高级编程、Linux程序设计两部书浅谈】教程文章相关的互联网学习教程文章

Unix高级环境编程学习小结(二)

进程环境:有8种方式使进程终止,五种为正常终止:(1)main返回(2)调用exit(3)调用_exit或_Exit(4)最后一个线程返回(5)从最后一个线程调用pthread_exit()异常终止有三种:调用abort接到一个信号(异常信号)最后一个线程对取消请求作出响应。 C程序的存储空间分配:malloc:分配制定字节数(sizeof)的存储区,此存储区中的初始值不确定。calloc :分配指定长度,指定数量的存储区,每一位都初始化为0realloc:增加或减...

c – UNIX系统编程中的S_IFMT是什么?【代码】

我正在学习系统调用,因此编写了一个代码来使用C语言实现ls.代码有效,但我无法理解它的工作原理val=(mystat.st_mode & ~S_IFMT)在下面给出的代码中?我理解其余的代码.#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <time.h>int main(int argc, char* argv[]) {DIR *mydir;struct dirent *myfile;struct stat mystat;mydir = opendir(ar...

UNIX(网络编程-域套接字):04---命名套接字通信(struct sockaddr_un)【图】

命名套接字之间互相通信。可以利用网络套接字的接口进行绑定、监听、接收数据等等 一、域套接字地址#include <sys/un.h> struct sockaddr_un{sa_family_t sun_family; /*AF_UNIX*/char sun_path[108]; /*pathname*/ } 因为域套接字是在同一台计算机上的不同进程之间通信。 系统提供了结构体,当域套接字与此结构体绑定之后。进行之间就可以通过域套接字进行互相访问sun_family: 域套接字进行通信的协议 sun_path: 用...

Unix编程艺术——摘录一【图】

Unix哲学Unix本身所作出的榜样体现出来的。从整体上来说,可以概括为以下几点:1.模块原则:使用简洁的接口拼合简单的部件。2.清晰原则:清晰胜于机巧。3.组合原则:设计时考虑拼接组合。4.分离原则:策略同机制分离,接口同引擎分离。5.简洁原则:设计要简洁,复杂度能低则低。6.吝啬原则:除非确无它法,不要编写庞大的程序。7.透明性原则:设计要可见,以便审查和调试。8.健壮原则:健壮源于透明与简洁。9.表示原则:把知识叠入...

UNIX环境高级编程笔记系列 目录

每一章的重点会使用加粗字体 第一章:UNIX基础知识:UNIX体系结构;文件和目录;输入和输出;程序和进程;出错处理;信号;时间值;系统调用和库函数 第三章:文件I/O:文件描述符;文件操作函数;文件操作示例;I/O的效率;原子操作;dup()和dup2();fcntl();ioctl();其他函数 第四章:文件和目录:stat()、fstat()、fstatat()和lstat();文件类型;文件访问权限;access()和faccessat();文件操作其他函数;目录相关函数 第五...

UNIX(网络编程-IO操作):11---recvmsg、sendmsg函数、struct msghdr【图】

一、函数原型#include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);//返回值:成功返回读取/写出的字节数;失败返回-1 二、struct msghdr结构体struct msghdr {void *msg_name; /* optional address */socklen_t msg_namelen; /* size of address */struct iovec *msg_iov; /* scatter/gather ar...

UNIX(网络编程-UDP):01---recvfrom、sendto【图】

一、格式#include<sys/types.h> #include<sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen); ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);//返回值:成功返回读/写的字节数;出错返回-1参数: 参数1:套接字描述符(这里的sockfd是使用这个函数的sockfd) 参数2、3:发...

UNIX(网络编程-UDP):02---UDP套接字的数据接收缓冲区【图】

一、UDP套接字的数据接收缓冲区二、UDP与TCP的不同 TCP每连接一个客户端,然后fork,这样,每一个连接都会有自己的数据接收缓冲区 UDP不会与客户端建立连接,只有一个缓冲区用来接受所有数据

<unix网络编程>UDP套接字编程【代码】

典型的UDP客户/服务器程序的函数调用如下: 1、缓冲区 发送缓冲区用虚线表示,任何UDP套接字都有发送缓冲区,不过该缓冲区仅能表示写到该套接字的UDP数据报的上限。如果应用进程写一个大于套接字缓冲区大小的数据报,将会返回该进程一个EMSGSIZE错误。从写一个UDP套接字的write调用成功返回,表示所写的数据报或其所有的片段已被加入到数据链路层的输出队列。如果该队列没有足够的空间存放该数据报或它的某个片段,内核通常会返...

线程终止(UNIX环境高级编程笔记)

??如果进程中的任意线程调用了exit、_Exit或者_exit,那么整个进程就会终止。 ??单个线程可以通过3种方式退出,因此可以在不终止整个进程的情况下,停止它的控制流。 ??(1)线程可以简单地从启动例程中返回,返回值是线程的退出码。 ??(2)线程可以被同一进程中的其他线程取消。 ??(3)线程调用pthread_exit。#include <pthread.h>void pthread_exit(void *rval_ptr);??rval_ptr参数是一个无类型指针。进程中的其它线程可以通过...

Socket网络编程之本地传输UNIX【代码】

本地套接字 (1)作用用于本地不同进程间通信(2)流程创建套接字对象from socket import *sockfd=socket(AF_UNIX,SOCK_STREAM)建立套接字文件sockfd.bind(path)绑定一个文件监听sockfd.listen(5)等待连接请求c, addr = sockfd.accept()收发消息c.recv(1024) c.send(b"Receive your message")(3)代码示例 # unix_recv.pyfrom socket import * import os# 确定使用哪个套接字文件 sock_file = "./sock_file"# 如果存在同名文件则删...

UNIX环境高级编程 第四章 第一个示例程序 结果不一致

源码: #include "apue.h" int main(int argc, char argv[]) { int i; struct stat buff; char *ptr; #for(i = 1; i < argc; i++)Segmentation fault (core dumped) memmory overflow for(i = 1; i < argc; i++) { printf("%s:",argv[i]); if(lstat(argv[i], &buff) < 0) { err_ret("lstat error"); ...

unix系统编程day01【代码】

一、进程相关概念 程序与进程 程序:是指编译好的二进制文件,再磁盘上,不占用系统资源(cpu,内存,打开的文件,设备,锁。。。) 进程:是一个抽象的概念,与操作系统原理联系紧密,进程是活跃的程序,占用系统资源(程序运行起来,占用一个进程) 程序 -> 剧本(纸) 进程 -> 戏(舞台、演员、灯光) 同一剧本可以在多个舞台同时上演。同样同一个程序可以加载为多个不同的进程并互不影响。 如:开两个终端,...

Unix/Linux 编程:网络编程之 基于Reactor实现WebSocket服务【代码】【图】

使用到的上一篇文章中基于epoll实现的Reactor模型。 OpenSSL使用其中的SHA1,base64 encode等库 openSSL源码使用1.1.0l $ tar xzvf OpenSSL-1.1.0l.tar.gz $ cd OpenSSL-1.1.0l $ ./config –-prefix=/usr/local/openssl $ make $ sudo make install 安装完以后需要将openSSL的库和头文件添加到默认的搜索路径。否则后续编译需要加一大串 -I "...." -L "..." 这样的命令 执行 这是给全局用户修改 sudo vim /etc/profile加入这两行...

Unix网络编程-进程间通信---4、最初的Unix IPC -- 管道【图】

1、客户端服务器需求2、int pipe(int fd[2])//返回两个文件描述符,fd[0]读,fd[1]写; 宏S_ISFIFO用来确定一个文件描述符或者文件是管道还是FIFO; 3、半双工通信管道的使用: 一对父子进程,由父进程创建一个管道,子进程复制副本;父进程关闭读fd[0],子进程关闭写fd[1];实现了单向父 ----> 子的通信 因为父进程创建的管道资源是属于父子进程公共分享的空间,这个资源只在父进程创建了一份;4、如何理解who | sort | lp ----->...