fd

记录Python学习中turtle库的使用

耗尽温柔 提交于 2020-02-07 12:27:36
实例 1.描述:利用turtle库绘制七段数码管的日期显示 2.思路:抽象规则,七段数码管按照一定的步序绘制,将其模块化,其中根据具体的数字决定在绘制过程中海龟是否落笔还是飞跃。 3.代码 #SevenDigitsDraw.py import turtle , time def drawGap ( ) : #绘制数码管间隔(提笔,前进五个像素制造间隙) turtle . penup ( ) turtle . fd ( 5 ) def drawLine ( draw ) : #绘制单段数码管 drawGap ( ) turtle . pendown ( ) if draw else turtle . penup ( ) turtle . fd ( 40 ) drawGap ( ) turtle . right ( 90 ) def drawDigit ( d ) : #根据数字绘制七段数码管(按照绘制七段的步序编字形码) drawLine ( True ) if d in [ 2 , 3 , 4 , 5 , 6 , 8 , 9 ] else drawLine ( False ) drawLine ( True ) if d in [ 0 , 1 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] else drawLine ( False ) drawLine ( True

【Linux】系统文件IO

你。 提交于 2020-02-06 20:23:28
系统文件IO 系统调用接口 open write read lseek close 文件描述符fd 文件描述符的分配规则:最小未使用 重定向 系统调用接口 open # include <sys/types.h> # include <sys/stat.h> # include <fcntl.h> int open ( const char * pathname , int flags ) ; int open ( const char * pathname , int flags , mode_t mode ) ; 参数: pathname: 要打开或创建的目标文件 flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。 可选参数: O_RDONLY: 只读打开  O_WRONLY: 只写打开  O_RDWR : 读,写打开 上面这三个常量, 必须指定一个且只能指定一个 O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限 O_APPEND: 追加写 O_TRUNC:打开同时截断文件为0长度 mode:文件创建权限(最后文件的权限是mode &~ umask) 可以通过mode_t umask(mode_t mask);函数将当前进程的文件创建权限掩码修改为mask 返回值: 成功

java自动创建多级目录

天涯浪子 提交于 2020-02-06 10:11:30
// 创建文件上传路径 public static void mkdir(String path) { File fd = null; try { fd = new File(path); if (!fd.exists()) { fd.mkdirs(); } } catch (Exception e) { e.printStackTrace(); } finally { fd = null; } } 经常会遇见在创建某一目录时 因为其上一层目录即父目录不存在而抛出异常(指定文件路径不存在) jdk中提供了创建目录的两种方法实现 mkdir() 和 mkdirs() 前者是在给定目录结构path参数下创建指定的目录, 如果path中少了一层目录没有创建则会抛出异常(FileNotFoundException) 而第二个方法,则是相对安全的实现,因为他会自动创建不存在的父级目录。 来源: https://www.cnblogs.com/azhqiang/p/3981459.html

libevent安装及使用

烂漫一生 提交于 2020-02-06 07:57:47
一、安装libevent 官网:http://libevent.org/ 选择最新版本下载,我选择的是libevent-2.0.22-stable.tar.gz,然后安装README文件中描述的方法编译、安装即可。 ./configure make make verify # 可选操作 make install 二、使用libevent 示例1:回显服务器 /******************************************************************************* * File Name : echo.c * Author : zjw * Email : emp3XzA3MjJAMTYzLmNvbQo= (base64 encode) * Create Time : 2015年07月14日 星期二 09时05分37秒 *******************************************************************************/ #include <event.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string

unix 环境高级编成 apue.h ,apueerror.h的代码

左心房为你撑大大i 提交于 2020-02-05 16:42:23
===================apueerror.h========================================= $ cat apueerror.h #include <errno.h> /* for definition of errno */ #include <stdarg.h> /* ISO C variable aruments */ static void err_doit(int, int, const char *, va_list); /* * Nonfatal error related to a system call. * Print a message and return. */ void err_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, errno, fmt, ap); va_end(ap); } /* * Fatal error related to a system call. * Print a message and terminate. */ void err_sys(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(1, errno,

阻塞I/O、非阻塞I/O和I/O多路复用

£可爱£侵袭症+ 提交于 2020-02-05 13:23:00
一、阻塞I/O 首先,要从你常用的IO操作谈起,比如read和write,通常IO操作都是阻塞I/O的,也就是说当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起,直到收到数据。阻塞的意思,就是一直等着。阻塞I/O就是等着数据过来,进行读写操作。应用的函数进行调用,但是内核一直没有返回,就一直等着。应用的函数长时间处于等待结果的状态,我们就称为阻塞I/O。每个应用都得等着,每个应用都在等着,浪费啊!很像现实中的情况。大家都不干活,等着数据过来,过来工作一下,没有的话继续等着。 二、非阻塞I/O 非阻塞IO很简单,通过fcntl(POSIX)或ioctl(Unix)设为非阻塞模式,这时,当你调用read时,如果有数据收到,就返回数据,如果没有数据收到,就立刻返回一个错误,如EWOULDBLOCK。这样是不会阻塞线程了,但是你还是要不断的轮询来读取或写入。相当于你去查看有没有数据,告诉你没有,过一会再来吧!应用过一会再来问,有没有数据?没有数据,会有一个返回。但是依旧很不好。应用必须得过一会来一下,问问内核有木有数据啊。这和现实很像啊!好多情况都得去某些地方问问好了没有?木有,明天再过来。明天,好了木有?木有,后天再过来。。。。。忙碌的应用。。。。 三、I/O多路复用 多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态

大白话五种IO模型

微笑、不失礼 提交于 2020-02-04 12:57:12
目录 大白话五种IO模型 一、I/O模型介绍 二、阻塞I/O模型 2.1 一个简单的解决方案 2.2 该方案的问题 2.3 改进方案 2.4 改进后方案的问题 三、非阻塞I/O模型 3.1 非阻塞I/O实例 四、多路复用I/O模型 4.1 select/poll模型 4.1.1 select网络I/O模型 4.1.2 select监听fd变化的过程分析 4.1.3 该模型的优点 4.1.4 该模型的缺点 4.2 epoll模型(了解) 五、信号驱动I/O模型(了解) 六、异步I/O模型 七、I/O模型比较分析 大白话五种IO模型 一、I/O模型介绍 为了更好地了解I/O模型,我们需要事先回顾下: 同步、异步、阻塞、非阻塞 同步(synchronous) I/O和异步(asynchronous) I/O,阻塞(blocking) I/O和非阻塞(non-blocking)I/O分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous I/O和non-blocking I/O是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network I/O。本文最重要的参考文献是Richard

13-Openwrt libubox ustream

∥☆過路亽.° 提交于 2020-02-03 02:08:17
流缓冲管理, ustream_fd 跟 uloop_fd 有什么不一样呢? ustream_fd 内部其实就是 uloop_fd ,与fopen和open类似,fopen的内部也是open加上流缓冲管理。 struct ustream_fd { struct ustream stream; struct uloop_fd fd; }; ustream相关的函数 void ustream_fd_init(struct ustream_fd *s, int fd) void ustream_init_defaults(struct ustream *s) void ustream_free(struct ustream *s) ustream的应用在uhttpd的socket监听里面有使用到 bool uh_accept_client(int fd, bool tls) { static struct client *next_client; struct client *cl; unsigned int sl; int sfd; static int client_id = 0; struct sockaddr_in6 addr; if (!next_client) next_client = calloc(1, sizeof(*next_client)); cl = next

IPC通信_无名管道(PIPE)

十年热恋 提交于 2020-02-02 23:56:30
无名管道只能在具有公共祖先的两个进程间使用,且建议半双工使用 ( 因为历史上就是半双工,虽然有些系统支持全双工管道 ) 。 无名管道通过 pipe 函数创建 #include <unistd.h> int pipe(int fd[2]); 其中:参数 fd 返回两个文件描述符, fd[0] 只用来读,是输出 ,fd[1] 只用来写,是输入。 举例: #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> // linux支持双通道? int main() { int fd[2]; int pid = 0; int n = 0; char buf[128] = {0}; if(pipe(fd) < 0) { printf("pipe failed\n"); return -1; } if(pid = fork() == 0) {// 子进程 printf("child print\n"); close(fd[0]); write(fd[1],"hello,this is child\n",40); } else {// 父进程 printf("father print\n"); close(fd[1]); n = read(fd[0],buf,sizeof(buf)); if(n >

2.1&2.2python学习笔记

守給你的承諾、 提交于 2020-02-02 21:10:22
1) 函数参数 1. 必选参数在前,默认参数在后 ( 多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数 ) 2. 可变参数:参数前面加了一个 * 号(在 list 或 tuple 前面加一个 * 号,把 list 或 tuple 的元素变成可变参数传进去); 3. 关键字参数 : 参数前面加了个 ** , (在 dict 的前加 ** , dict 中所有 key-value 用关键字参数传入到函数的 ** 变量中, ** 变量将获得一个 dict ,注意变量获得的 dict 是一份拷贝,对变量的改动不会影响到函数外的 dict )。 如果要限制关键字参数的名字,就可以用命名关键字参数: def person(name, age, *, city, job):#(只接收city和job作为关键字参数) 命名关键字参数需要一个特殊分隔符 * , * 后面的参数被视为命名关键字参数 作用:限制要传入的参数的名字,只能传我已命名关键字参数。 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符 * 了: def person(name, age, *args, city, job): ps: 定义默认参数要牢记一点:默认参数必须指向不变对象! 2 )列表生成器 示例:L1 = ['Hello', 'World', 18,