Created
April 10, 2011 14:18
-
-
Save sergeykish/912377 to your computer and use it in GitHub Desktop.
access /dev/draw from C, rc, python, ruby, go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# C | |
% ./8.out | |
4 1 x8r8g8b8 0 83 41 889 739 83 41 889 739 | |
# rc, message by python | |
% named-image.rc | |
close failed: [Errno 12] Invalid argument | |
5 1 x8r8g8b8 0 83 41 889 739 83 41 889 739 | |
% python named-image.py | |
27 1 x8r8g8b8 0 333 17 1607 692 333 17 1607 692 | |
# rc, message by ruby | |
% named-image.rc | |
8 1 x8r8g8b8 0 83 41 889 739 83 41 889 739 | |
% ruby named-image.rb | |
26 1 x8r8g8b8 0 14 130 1085 976 14 130 1085 976 | |
# Go | |
% 8.out | |
23 1 x8r8g8b8 0 11 17 1322 765 11 17 1322 765 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python | |
import struct | |
def named_image(id, name): | |
return 'n' + struct.pack('<IB', id, len(name)) + name + 'v' | |
name = open('/dev/winname').read() | |
print named_image(1, name) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Integer | |
def to_c | |
[self].pack('c') | |
end | |
def to_v | |
[self].pack('v') | |
end | |
def to_V | |
[self].pack('V') | |
end | |
end | |
def named_image(id, name) | |
'n' + id.to_V + name.length.to_c + name + 'v' | |
end | |
name = open("/dev/winname").read(64) | |
print named_image(1, name) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
void | |
main(int argc, char*argv []) | |
{ | |
char buf[128], info[12 * 12 + 1], name[256]; | |
int datafd, ctlfd, namefd; | |
int count, namelen; | |
ctlfd = open("/dev/draw/new", ORDWR|OCEXEC); | |
read(ctlfd, info, sizeof info); | |
sprint(buf, "/dev/draw/%d/data", atoi(info+0*12)); | |
datafd = open(buf, ORDWR|OCEXEC); | |
namefd = open("/dev/winname", OREAD); | |
namelen = read(namefd, name, sizeof name); | |
buf[0] = 'n'; | |
BPLONG(buf+1, 1); | |
buf[5] = namelen; | |
memmove(buf+6, name, namelen); | |
buf[6+namelen] = 'v'; | |
write(datafd, buf, 6 + namelen + 1); | |
count = read(ctlfd, info, sizeof info); | |
print(info); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"os" | |
"strings" | |
"bytes" | |
"encoding/binary" | |
"fmt" | |
) | |
func initDraw() (ctl *os.File, data *os.File) { | |
buf := make([]byte, 12 * 12) | |
ctl, _ = os.Open("/dev/draw/new", os.O_RDONLY, 0) | |
ctl.Read(buf) | |
params := strings.Fields(string(buf)) | |
dirno := params[0] | |
data, _ = os.Open("/dev/draw/" + dirno + "/data", os.O_RDWR, 0) | |
return ctl, data | |
} | |
func name() []byte { | |
buf := make([]byte, 256) | |
f, _ := os.Open("/dev/winname", os.O_RDONLY, 0) | |
num, _ := f.Read(buf) | |
buf = buf[:num] | |
return buf | |
} | |
func namedImage(data *os.File, id int, name []byte) { | |
buf := make([]byte, 0) | |
message := bytes.NewBuffer(buf) | |
message.WriteString("n") | |
binary.Write(message, binary.LittleEndian, uint32(id)) | |
binary.Write(message, binary.LittleEndian, uint8(len(name))) | |
message.Write(name) | |
message.WriteString("v") | |
message.WriteTo(data) | |
} | |
func main() { | |
ctl, data := initDraw() | |
namedImage(data, 1, name()) | |
buf := make([]byte, 12 * 12) | |
_, err := ctl.Read(buf) | |
if err != nil { | |
fmt.Printf("error: %s\n", err.String()) | |
os.Exit(1) | |
} | |
fmt.Printf(string(buf)) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python | |
import struct | |
def named_image(id, name): | |
return 'n' + struct.pack('<IB', id, len(name)) + name + 'v' | |
ctl = open('/dev/draw/new', 'r') | |
conf = ctl.read().split() | |
dirno = conf[0] | |
data = open('/dev/draw/'+dirno+'/data', 'r+') | |
name = open('/dev/winname').read() | |
data.write(named_image(1, name)) | |
data.flush() | |
print ctl.read() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Integer | |
def to_c | |
[self].pack('c') | |
end | |
def to_v | |
[self].pack('v') | |
end | |
def to_V | |
[self].pack('V') | |
end | |
end | |
def named_image(id, name) | |
'n' + id.to_V + name.length.to_c + name + 'v' | |
end | |
ctl = open("/dev/draw/new", "r+") | |
params = ctl.read(12 * 12).split | |
dirno = params[0].to_i | |
data = open("/dev/draw/#{dirno}/data", "r+") | |
name = open("/dev/winname").read(64) | |
data.write named_image(1, name) | |
data.flush | |
puts ctl.read |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/rc | |
clonefile=/dev/draw/new | |
<[4] $clonefile { | |
conf=`{cat /fd/4 >[2]/dev/null} | |
id=`{echo $conf | awk '{print $1}'} | |
data=`{basename -d $clonefile} ^ / ^ $id ^/data | |
python named-image-message.py >$data | |
cat /fd/4 >[2]/dev/null | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6604 ruby Open 0x9bdf4 00181fcc/"/dev/draw/new" 00000002 = 4 "" 0x1213802cb72ccfe8 0x1213802cb748d3c8 | |
6604 ruby Pread 0x9e861 4 0018030c/".........16...........0....x8r8g8b8...........0...........0....." 4096 -0x1 = 144 "" 0x1213802cb78728d0 0x1213802cb7918140 | |
6604 ruby Brk 0x9e404 0018251c 00000000 0009c01b = 0 "" 0x1213802cb7dc2a88 0x1213802cb7dc5198 | |
6604 ruby Open 0x9bdf4 001823a4/"/dev/draw/16/data" 00000002 = 5 "" 0x1213802cb823e1e8 0x1213802cb844f6a8 | |
6604 ruby Open 0x9bdf4 00182094/"/dev/winname" 00000000 = 6 "" 0x1213802cb87f09d8 0x1213802cb8a3cfe8 | |
6604 ruby Brk 0x9e404 00183534 00023b05 0009c075 = 0 "" 0x1213802cb8d678a8 0x1213802cb8d69bd0 | |
6604 ruby Pread 0x9e861 6 0018252c/"window.1.8" 4096 -0x1 = 10 "" 0x1213802cb9303168 0x1213802cb94518f8 | |
6604 ruby Pread 0x9e861 6 0018252c/"" 4096 -0x1 = 0 "" 0x1213802cb98e9190 0x1213802cb9a263c8 | |
6604 ruby Pread 0x9e861 6 0018252c/"" 4096 -0x1 = 0 "" 0x1213802cba0023c8 0x1213802cba1420f8 | |
6604 ruby Brk 0x9e404 00183654 3ffff728 0009c01b = 0 "" 0x1213802cba4f60f0 0x1213802cba4f8800 | |
6604 ruby Brk 0x9e404 0018466c 0011a9f4 0009c075 = 0 "" 0x1213802cbaa2a558 0x1213802cbaa2cc68 | |
6604 ruby Fstat 0x9d028 00000004 000faae8 00000071 = 82 "" 0x1213802cbaec1238 0x1213802cbaf568d8 | |
6604 ruby Pread 0x9e861 4 /"" 4096 0xffffffffffffffff = -1 "unknown id for draw image" 0x1213802cbb395390 0x1213802cbb446f50 | |
6604 ruby Errstr 0x9f484 0xc3860/"" 128 = 0 "" 0x1213802cbb800538 0x1213802cbb807e50 | |
6604 ruby Errstr 0x9f4d9 0xc3860/"" 128 = 0 "" 0x1213802cbbc090a8 0x1213802cbbc0ea80 | |
6604 ruby Pread 0x9e861 4 /"" 4096 0xffffffffffffffff = -1 "unknown id for draw image" 0x1213802cbbff9960 0x1213802cbc09ea00 | |
6604 ruby Errstr 0x9f484 0xc3860/"" 128 = 0 "" 0x1213802cbc459370 0x1213802cbc45f130 | |
6604 ruby Errstr 0x9f4d9 0xc3860/"" 128 = 0 "" 0x1213802cbc8d8180 0x1213802cbc8ddb58 | |
6604 ruby Brk 0x9e404 0018492c 0000002b 0009c01b = 0 "" 0x1213802cbcc7c390 0x1213802cbcc7e6b8 | |
6604 ruby Brk 0x9e404 00184b24 00000000 0009c01b = 0 "" 0x1213802cbd2b28e0 0x1213802cbd2b4ff0 | |
6604 ruby Brk 0x9e404 00185b3c 00181934 0009c075 = 0 "" 0x1213802cbd74c0b8 0x1213802cbd74e7c8 | |
6604 ruby Brk 0x9e404 00185ccc 001225a0 0009c01b = 0 "" 0x1213802cbdbe1df8 0x1213802cbdbe48f0 | |
6604 ruby Pwrite 0x9e5dd 2 00184b34/"named-image.rb:26:in.`read':.Invalid.argument.-./dev/draw/new.(E" 78 -0x1named-image.rb:26:in `read': Invalid argument - /dev/draw/new (Errno::EINVAL) | |
= 78 "" 0x1213802cbe05ba00 0x1213802cbe318108 | |
6604 ruby Pwrite 0x9e5dd 2 00184b34/".from.named-image.rb:26." 24 -0x1 from named-image.rb:26 | |
= 24 "" 0x1213802cbe6ff550 0x1213802cbea570b8 | |
6604 ruby Close 0x9e199 6 = 0 "" 0x1213802cbf0357c8 0x1213802cbf145370 | |
6604 ruby Pwrite 0x9e5dd 5 00183664/"n.....window.1.8v" 17 -0x1 = 17 "" 0x1213802cbf5367e0 0x1213802cbf5e58a8 | |
6604 ruby Close 0x9e199 5 = 0 "" 0x1213802cbf976620 0x1213802cbf9f8ff8 | |
6604 ruby Close 0x9e199 4 = 0 "" 0x1213802cbfdac438 0x1213802cbfe52860 | |
6604 ruby Exits 0x9f3cf 000d3e80/"1"cwrite: /proc/6604/syscall: failed 12 bytes: process exited | |
6632 python Open 0x228045 00395720/"/dev/draw/new" 00000000 = 3 "" 0x1213805f67ab6ac8 0x1213805f67cc4cc0 | |
6632 python Fstat 0x229874 00000003 00474a8c 00000071 = 82 "" 0x1213805f68082510 0x1213805f6811cdb8 | |
6632 python Brk 0x22acd6 00476800 00000000 0022826c = 0 "" 0x1213805f68633590 0x1213805f68636088 | |
6632 python Fstat 0x229874 00000003 00474a8c 00000071 = 82 "" 0x1213805f68b5f528 0x1213805f68bf47e0 | |
6632 python Seek 0x22842b 3ffffbb8 0000000000000003 00000000 = 0 "" 0x1213805f69021570 0x1213805f690253f0 | |
6632 python Seek 0x22842b 3ffffb8c 0000000000000003 00000000 = 0 "" 0x1213805f694632f0 0x1213805f69467558 | |
6632 python Brk 0x22acd6 0047a818 00474a50 002282c6 = 0 "" 0x1213805f698969f8 0x1213805f69899108 | |
6632 python Pread 0x22b14c 3 00402f50/".........18...........0....x8r8g8b8...........0...........0....." 4096 -0x1 = 144 "" 0x1213805f69cd3958 0x1213805f69d72c38 | |
6632 python Pread 0x22b14c 3 /"" 8048 0xffffffffffffffff = -1 "unknown id for draw image" 0x1213805f6a20a4d0 0x1213805f6a2a6100 | |
6632 python Errstr 0x22bd6f 0x36b19c/"" 128 = 0 "" 0x1213805f6a85a060 0x1213805f6a85fe20 | |
6632 python Errstr 0x22bdc4 0x36b19c/"" 128 = 0 "" 0x1213805f6ac9c1c8 0x1213805f6aca1ba0 | |
6632 python Open 0x228045 003d8528/"/dev/draw/18/data" 00000002 = 5 "" 0x1213805f6b1eea90 0x1213805f6b48fc18 | |
6632 python Fstat 0x229874 00000005 00474a8c 00000071 = 83 "" 0x1213805f6b939d90 0x1213805f6b9d32b0 | |
6632 python Open 0x228045 003d8528/"/dev/draw/18/refresh" 00000000 = 6 "" 0x1213805f6be51508 0x1213805f6bfcea98 | |
6632 python Fstat 0x229874 00000006 00474a8c 00000071 = 86 "" 0x1213805f6c363690 0x1213805f6c3fc3e0 | |
6632 python Open 0x228045 00395720/"/dev/winname" 00000000 = 7 "" 0x1213805f6c7e0d30 0x1213805f6c93e6f0 | |
6632 python Fstat 0x229874 00000007 00474a8c 00000071 = 86 "" 0x1213805f6ceeebb8 0x1213805f6cffbc68 | |
6632 python Fstat 0x229874 00000007 00474a8c 00000071 = 86 "" 0x1213805f6d2d6fa0 0x1213805f6d3a0648 | |
6632 python Seek 0x22842b 3ffffbb8 0000000000000007 00000000 = 0 "" 0x1213805f6d988998 0x1213805f6d98df88 | |
6632 python Seek 0x22842b 3ffffb8c 0000000000000007 00000000 = 0 "" 0x1213805f7193d318 0x1213805f71941d50 | |
6632 python Pread 0x22b14c 7 00473920/"window.9.1" 4096 -0x1 = 10 "" 0x1213805f7206b158 0x1213805f721f07d0 | |
6632 python Pread 0x22b14c 7 0047682e/"" 8182 -0x1 = 0 "" 0x1213805f726ed198 0x1213805f728733c8 | |
6632 python Close 0x22aa13 7 = 0 "" 0x1213805f72d18b08 0x1213805f72ea7208 | |
6632 python Brk 0x22acd6 0047b290 0011e56a 0022826c = 0 "" 0x1213805f733843e8 0x1213805f73386ee0 | |
6632 python Fstat 0x229874 00000003 00474a8c 00000071 = 82 "" 0x1213805f73969c40 0x1213805f73a05870 | |
6632 python Seek 0x22842b 3ffffbb8 0000000000000003 00000000 = 0 "" 0x1213805f73eb76e8 0x1213805f73ebbd38 | |
6632 python Seek 0x22842b 3ffffb8c 0000000000000003 00000000 = 0 "" 0x1213805f745c1308 0x1213805f745c5570 | |
6632 python Brk 0x22acd6 0047f2a8 00474a50 002282c6 = 0 "" 0x1213805f74a24f80 0x1213805f74a27690 | |
6632 python Pread 0x22b14c 3 /"" 4096 0xffffffffffffffff = -1 "unknown id for draw image" 0x1213805f74e553c0 0x1213805f74eed940 | |
6632 python Errstr 0x22bd6f 0x36b19c/"" 128 = 0 "" 0x1213805f75381f10 0x1213805f75387cd0 | |
6632 python Errstr 0x22bdc4 0x36b19c/"" 128 = 0 "" 0x1213805f757c4460 0x1213805f757c9e38 | |
6632 python Brk 0x22acd6 004802c0 0004ed2b 002282c6 = 0 "" 0x1213805f75d086b0 0x1213805f75d0b1a8 | |
6632 python Pwrite 0x22aec8 2 0047f2b8/"Traceback.(most.recent.call.last):." 35 -0x1Traceback (most recent call last): | |
= 35 "" 0x1213805f761553f8 0x1213805f7638b2a8 | |
6632 python Open 0x228045 00414fac/"named-image.py" 00000000 = 7 "" 0x1213805f7678ad90 0x1213805f768cc618 | |
6632 python Pwrite 0x22aec8 2 0047f2b8/"..File."named-image.py",.line.13,.in.<module>." 46 -0x1 File "named-image.py", line 13, in <module> | |
= 46 "" 0x1213805f76ce62f8 0x1213805f7705e200 | |
6632 python Brk 0x22acd6 004812d8 002213ef 002282c6 = 0 "" 0x1213805f7743ecd0 0x1213805f774417c8 | |
6632 python Pread 0x22b14c 7 004802d0/"#!/bin/python..import.struct..ctl.=.open('/dev/draw/new',.'r').c" 4096 -0x1 = 319 "" 0x1213805f77966230 0x1213805f77a02248 | |
6632 python Pwrite 0x22aec8 2 0047f2b8/"....print.ctl.read()." 21 -0x1 print ctl.read() | |
= 21 "" 0x1213805f77f15f28 0x1213805f781f6468 | |
6632 python Close 0x22aa13 7 = 0 "" 0x1213805f785e0f60 0x1213805f78673ef0 | |
6632 python Pwrite 0x22aec8 2 0047f2b8/"IOError:.[Errno.12].Invalid.argument." 37 -0x1IOError: [Errno 12] Invalid argument | |
= 37 "" 0x1213805f78b7fae8 0x1213805f78de8de8 | |
6632 python Close 0x22aa13 6 = 0 "" 0x1213805f7979a120 0x1213805f797a3590 | |
6632 python Close 0x22aa13 3 = 0 "" 0x1213805f7e704e18 0x1213805f7e70ee40 | |
6632 python Pwrite 0x22aec8 5 00473920/"n.....window.9.1v" 17 -0x1 = 17 "" 0x1213805f7eb50bc0 0x1213805f7ec39e38 | |
6632 python Close 0x22aa13 5 = 0 "" 0x1213805f7f055a58 0x1213805f7f104738 | |
6632 python Exits 0x22bcba 0036fe2c/"1"cwrite: /proc/6632/syscall: failed 12 bytes: process exited |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment