summaryrefslogtreecommitdiff
path: root/misc/cgo/stdio/file.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-10-03 10:37:12 -0700
committerRuss Cox <rsc@golang.org>2009-10-03 10:37:12 -0700
commit1bb8f19f5e9016a9eb118b8aba2b5689b4505812 (patch)
tree7b69b0974f4999bac76d11abed2071a2dc9e97aa /misc/cgo/stdio/file.go
parent6b7539d607f26a1b1cd3eda71fc123ad4d52a133 (diff)
downloadgolang-1bb8f19f5e9016a9eb118b8aba2b5689b4505812.tar.gz
8c, 8l dynamic loading support.
better mach binaries. cgo working on darwin+linux amd64+386. eliminated context switches - pi is 30x faster. add libcgo to build. on snow leopard: - non-cgo binaries work; all tests pass. - cgo binaries work on amd64 but not 386. R=r DELTA=2031 (1316 added, 626 deleted, 89 changed) OCL=35264 CL=35304
Diffstat (limited to 'misc/cgo/stdio/file.go')
-rw-r--r--misc/cgo/stdio/file.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/misc/cgo/stdio/file.go b/misc/cgo/stdio/file.go
new file mode 100644
index 000000000..7935f8f4d
--- /dev/null
+++ b/misc/cgo/stdio/file.go
@@ -0,0 +1,43 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+A trivial example of wrapping a C library in Go.
+For a more complex example and explanation,
+see ../gmp/gmp.go.
+*/
+
+package stdio
+
+// TODO(rsc): Remove fflushstdout when C.fflush(C.stdout) works in cgo.
+
+/*
+#include <stdio.h>
+#include <stdlib.h>
+
+void fflushstdout(void) { fflush(stdout); }
+*/
+import "C"
+import "unsafe"
+
+/*
+type File C.FILE
+
+var Stdout = (*File)(C.stdout)
+var Stderr = (*File)(C.stderr)
+
+func (f *File) WriteString(s string) {
+ p := C.CString(s);
+ C.fputs(p, (*C.FILE)(f));
+ C.free(p);
+}
+*/
+
+func Puts(s string) {
+ p := C.CString(s);
+ C.puts(p);
+ C.free(unsafe.Pointer(p));
+ C.fflushstdout();
+}
+