os: Implement listdir().

pull/118/head
Paul Sokolovsky 2014-05-13 02:25:39 +03:00
rodzic 2a2fdd7f43
commit 5e1007cf8b
3 zmienionych plików z 27 dodań i 1 usunięć

Wyświetl plik

@ -1,11 +1,14 @@
import ffi
import array
import struct
libc = ffi.open("libc.so.6")
errno = libc.var("i", "errno")
mkdir_ = libc.func("i", "mkdir", "si")
opendir_ = libc.func("P", "opendir", "s")
readdir_ = libc.func("P", "readdir", "P")
read_ = libc.func("i", "read", "ipi")
write_ = libc.func("i", "write", "iPi")
close_ = libc.func("i", "close", "i")
@ -25,6 +28,23 @@ def mkdir(name, mode=0o777):
e = mkdir_(name, mode)
check_error(e)
def listdir(path="."):
dir = opendir_(path)
if not dir:
check_error(e)
res = []
dirent_fmt = "iiHB256s"
while True:
dirent = readdir_(dir)
if not dirent:
break
dirent = ffi.as_bytearray(dirent, struct.calcsize(dirent_fmt))
dirent = struct.unpack(dirent_fmt, dirent)
fname = str(dirent[4].split('\0', 1)[0], "ascii")
if fname != "." and fname != "..":
res.append(fname)
return res
def read(fd, n):
buf = bytearray(n)
r = read_(fd, buf, n)

Wyświetl plik

@ -1,7 +1,7 @@
from distutils.core import setup
setup(name='micropython-os',
version='0.0.5',
version='0.0.6',
description='os module for MicroPython',
url='https://github.com/micropython/micropython/issues/405',
author='MicroPython Developers',

Wyświetl plik

@ -0,0 +1,6 @@
import os
l = os.listdir()
print(l)
assert "test_listdir.py" in l
assert "os" in l