fd

Python使用turtle库绘制小猪佩奇

隐身守侯 提交于 2020-01-16 05:26:33
Python使用turtle库绘制小猪佩奇 # -*- coding:utf-8 -*- import turtle as t import time def main ( ) : t . pensize ( 4 ) t . hideturtle ( ) t . colormode ( 255 ) t . color ( ( 255 , 155 , 192 ) , "pink" ) t . setup ( 840 , 500 ) t . speed ( 10 ) # 鼻子 t . pu ( ) t . goto ( - 100 , 100 ) t . pd ( ) t . seth ( - 30 ) t . begin_fill ( ) a = 0.4 for i in range ( 120 ) : if 0 <= i < 30 or 60 <= i < 90 : a = a + 0.08 t . lt ( 3 ) # 向左转3度 t . fd ( a ) # 向前走a的步长 else : a = a - 0.08 t . lt ( 3 ) t . fd ( a ) t . end_fill ( ) t . pu ( ) t . seth ( 90 ) t . fd ( 25 ) t . seth ( 0 ) t . fd ( 10 ) t . pd ( ) t .

Linux lsof命令详解

╄→гoц情女王★ 提交于 2020-01-16 04:09:45
lsof(List Open Files) 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。 在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因) 。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 选项 1 -a:列出打开文件存在的进程; 2 -c<进程名>:列出指定进程所打开的文件; 3 -g:列出GID号进程详情; 4 -d<文件号>:列出占用该文件号的进程; 5 +d<目录>:列出目录下被打开的文件; 6 +D<目录>:递归列出目录下被打开的文件; 7 -n<目录>:列出使用NFS的文件; 8 -i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) 9 -p<进程号>:列出指定进程号所打开的文件; 10 -u:列出UID号进程详情; 11 -h

Linux-lsof命令

穿精又带淫゛_ 提交于 2020-01-16 04:08:26
lsof,List Open Files 列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件(lsof强大原因) 。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 lsof输出信息含义 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 #lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root cwd DIR 3,3 1024 2 / init 1 root rtd DIR 3,3 1024 2 / init 1 root txt REG 3,3 38432 1763452 /sbin/init init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so init 1 root

UNP——第二章,TCP握手与挥手分析

痞子三分冷 提交于 2020-01-16 01:45:36
1.握手 说明:   下面涉及 FIN,SYN,ACK之类数据时,都是由TCP服务收发,   涉及 accept, listen 之类api,都是 应用进程 完成。   都统一使用 客户端,服务端描述,请自行分辨。 (1)首先描述下3次握手,TCP协议做了什么。 客户端,主动打开,发送自己的序列号SYNj,并期待对方回复ACKj+1 服务端,被动打开,接送自己的序列号SYNk和ACKj+1,并期待对方回复ACKk+1 客户端,接收对方ACK,己方打开完成,接收对方SYN,发送ACKk+1 服务端,接收对方ACK,己方打开完成。 分析下:   首先打开分为,被动打开和主动打开。   当接收到对方的ACK,则己方打开完成,则可以使用socket进行读写操作,但并不保证正常。 (2)结合 系统调用分析三次握手 客户端,listen,进行被动打开 服务端,connect ,进行主动打开,发送SYNj(如果乙方此时没有listen 完成,则connect 失败) 客户端,回复SYNk + ACKj+1, 应用层无任何变化。 服务端,收到 ACKj+1 + SYNk,并回复 ACKk+1, 甲方打开完成,connect 返回。 客户端,收到ACKj+1,可以进行 read,write。 服务端,accept,如果乙方没有收到 SYNj 则会阻塞,否则返回 服务端,收到ACKk+1,可以进行

进程间锁

帅比萌擦擦* 提交于 2020-01-15 01:30:29
目录 15.1 进程间pthread_mutex 15.2 文件锁 15.1 进程间互斥锁 直接上原语吧: # include <pthread.h> int pthread_mutexattr_init ( pthread_mutexattr_t * attr ) ; int pthread_mutexattr_destroy ( pthread_mutexattr_t * attr ) ; int pthread_mutexattr_setpshared ( pthread_mutexattr_t * attr , int pshared ) ; pshared : PTHREAD_PROCESS_PRIVATE:线程锁 PTHREAD_PROCESS_SHARED:进程锁 示例代码: /* 互斥量 实现 多进程 之间的同步 */ # include <unistd.h> # include <sys/mman.h> # include <pthread.h> # include <sys/types.h> # include <sys/wait.h> # include <fcntl.h> # include <string.h> # include <stdlib.h> # include <stdio.h> struct mt { int num ; pthread

【Python3之常用模块】

无人久伴 提交于 2020-01-14 03:09:45
一、time 1.三种表达方式 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。命令如下: import time print(time.time())   输出 1496667277.8989 格式化的时间字符串(Format String) import time print(time.strftime("%Y-%m-%d %X")) 输出 2017-06-05 20:55:48 补充: python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X

UNIX环境高级编程 第三章 文件I/O

回眸只為那壹抹淺笑 提交于 2020-01-14 02:48:55
UNIX环境高级编程——文件I/O 3.1 文件描述符 3.2 函数open和openat 参数 path: oflag: fd: 文件名和路径名截断 3.3 函数creat 3.4 函数close 3.5 函数lseek 3.6 函数read 3.7 函数write 3.8 I/O的效率 3.9 文件共享 3.10 原子操作 函数pread和pwrite 3.11 函数dup和dup2 3.12 函数sync、fsync和fdatasync 3.13 函数fcntl 3.14 函数ioctl 3.15 /dev/fd 3.1 文件描述符 作用:唯一表示一个文件(unix中设备也被看作文件) 当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 文件描述符的范围:0~OPEN_MAX-1 标准shell建立的文件描述符关联: STDIN_FILENO (文件描述符:0):标准输入 STDOUT_FILENO (文件描述符:1):标准输出 STDERR_FILENO (文件描述符:2):标准错误 3.2 函数open和openat 利用open或openat函数可以打开或创建一个文件 # include <fcntl.h> int open ( const char * path , int oflag , . . . . ) ; int openat ( int

第四章-文件和目录

…衆ロ難τιáo~ 提交于 2020-01-14 02:26:18
文件I/O 引言 函数stat、fstat、fstatat和lstat 文件类型 设置用户ID和设置组ID 文件访问权限 函数access和facessat 函数umask 函数chmod、fchmod和fchomodat 函数chown、fchown、fchownat和lchown 文件长度 文件截断 文件系统 函数link、linkat、unlink、unlinkat和remove 函数rename和renameat 创建和读取符号链接 文件的时间 函数futimens、utimensat和utimes 函数mkdir、mkdirat和rmdir 读目录 遍历文件层次结构 函数chdir、fchdir和getcwd 设备特殊文件 引言 本章内容覆盖 文件的所有属性 修改这些属性的各个函数 unix文件系统的结构以及符号链接 对目录进行操作的各个函数 函数stat、fstat、fstatat和lstat # include <sys/types.h> # include <sys/stat.h> # include <unistd.h> int stat ( const char * pathname , struct stat * buf ) ; //返回命名文件有关的信息结构 int fstat ( int fd , struct stat * buf ) ; /

打印LOGO

允我心安 提交于 2020-01-13 21:18:09
题目描述 G. 打印 LOGO 现在小学生也在学习基本的编程,课程目标是让小学生能够有基本的算法思想,并不涉及复杂的数据和实现细节与原理。 LOGO 语言就非常适合小学生学习,它通过绘图的方式来直观的表现出如何用程序代码控制事物。例如控制台上初始给出一个点,使用语句 FD 1/1 表示将控制台上的点 Forward 1/1 的距离,即,向当前方向移动 1 的距离,这样就画出一条线段。 语句 LD 60 则表示当前朝向向左转 60 度,接着再使用语句 FD 1/1 就画出一条与之前的直线夹角为 120 度的一条线段,这时控制台上就有绘制出了一条折线段。现在的任务是输出一段能绘制分形的 LOGO 语言的程序代码。 如果你还对分形不了解,下面就先介绍一下分形:分形(Fractal) 是一个几何形状可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,即具有自相似的性质。自然界中一定程度上具有分形的性质的事物有云朵、闪电、植物根系、雪花等等。著名的科赫曲线就是一种分形,它绘制的是形态类似雪花的图案。以下是 0 阶到 3 阶的科赫曲线: 要求你的程序输出 LOGO 语句,使它画出 N 阶图示的分形曲线。 Input 1 个数字 n,表示图形的阶数 (0 < n < 10) Output 绘制图形的 LOGO 指令 Example input 1 output FD 1/3 LD

c coroutine

半世苍凉 提交于 2020-01-12 23:52:34
今天看了下云风写的关于 c coroutine 博客 ( 代码 ), 发现 coroutine 实现原理其实还比较简单,就用户态栈切换,只需要几十行汇编,特别轻量级。 具体实现 1. 创建一个coroutine: 也就是创建一块连续内存,用于存放栈空间,并设置好入口函数所需要的寄存器   makecontext glibc c语言实现 2. resume coroutine: push保存当前执行上下文的寄存器到栈上,修改%rsp寄存器, jmp 到指定coroutine 执行指令位置,pop 恢复寄存器,开始执行 swapcontext glibc 汇编实现 3. yield coroutine: 同resume 栈切换涉及寄存器操作,得用汇编实现, x86 8个通用寄存器,x64 16个,通过push 保存到栈,pop 恢复到寄存器;比较重要寄存器%rsp 栈顶指针,%rip 指令指针不能直接操作,通过call、jmp 跳转新的Code执行位置。 在64汇编中,并不需要对16个寄存器都备份,其中%rax作为返回值、%r10 %r11 被调用方使用前会自己备份. 参考: X86-64寄存器和栈帧 X86-64寄存器的变化,不仅体现在位数上,更加体现在寄存器数量上。新增加寄存器%r8到%r15。加上x86的原有8个,一共16个寄存器。 刚刚说到,寄存器集成在CPU上