This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 77b2e8dfe examples/posix_stdio: New example dedicated to posix stdio 
library.
77b2e8dfe is described below

commit 77b2e8dfeeada4184dfd2f081ee26a65632f86c3
Author: vrmay23 <vmay.swe...@gmail.com>
AuthorDate: Sun Apr 27 18:52:14 2025 +0200

    examples/posix_stdio: New example dedicated to posix stdio library.
    
    This example will help newcomers to port software from Linux to NuttX
    in a POSIX compliant fashion using stdio library. It shows how to work with
    open(), close() and write() functions over /dev/console.
    
    Signed-off-by: Vinicius May <vmay.swe...@gmail.com>
---
 examples/posix_stdio/CMakeLists.txt |  35 +++++++++++++
 examples/posix_stdio/Kconfig        |  20 ++++++++
 examples/posix_stdio/Make.defs      |  25 +++++++++
 examples/posix_stdio/Makefile       |  32 ++++++++++++
 examples/posix_stdio/posix_stdio.c  | 100 ++++++++++++++++++++++++++++++++++++
 5 files changed, 212 insertions(+)

diff --git a/examples/posix_stdio/CMakeLists.txt 
b/examples/posix_stdio/CMakeLists.txt
new file mode 100644
index 000000000..e10cb5992
--- /dev/null
+++ b/examples/posix_stdio/CMakeLists.txt
@@ -0,0 +1,35 @@
+# 
##############################################################################
+# apps/examples/posix_stdio/CMakeLists.txt
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
+# license agreements.  See the NOTICE file distributed with this work for
+# additional information regarding copyright ownership.  The ASF licenses this
+# file to you under the Apache License, Version 2.0 (the "License"); you may 
not
+# use this file except in compliance with the License.  You may obtain a copy 
of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations under
+# the License.
+#
+# 
##############################################################################
+
+if(CONFIG_EXAMPLES_POSIX_STDIO)
+  nuttx_add_application(
+    NAME
+    ${CONFIG_EXAMPLES_POSIX_STDIO_PROGNAME}
+    PRIORITY
+    ${CONFIG_EXAMPLES_POSIX_STDIO_PRIORITY}
+    STACKSIZE
+    ${CONFIG_EXAMPLES_POSIX_STDIO_STACKSIZE}
+    MODULE
+    ${CONFIG_EXAMPLES_POSIX_STDIO}
+    SRCS
+    posix_stdio.c)
+endif()
diff --git a/examples/posix_stdio/Kconfig b/examples/posix_stdio/Kconfig
new file mode 100644
index 000000000..3c41e975f
--- /dev/null
+++ b/examples/posix_stdio/Kconfig
@@ -0,0 +1,20 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+config EXAMPLES_POSIX_STDIO
+       bool "Posix stdio example"
+       default n
+       ---help---
+       Enable POSIX stdio example that shows how to use open(), write() and 
close() via /dev/console.
+
+config EXAMPLES_POSIX_STDIO_PROGNAME
+       string "Program name"
+       default "posix_stdio"
+       depends on EXAMPLES_POSIX_STDIO
+
+config EXAMPLES_POSIX_STDIO_PRIORITY
+       int "POSIX_STDIO test priority"
+       default 100
+       depends on EXAMPLES_POSIX_STDIO
diff --git a/examples/posix_stdio/Make.defs b/examples/posix_stdio/Make.defs
new file mode 100644
index 000000000..72d9594a4
--- /dev/null
+++ b/examples/posix_stdio/Make.defs
@@ -0,0 +1,25 @@
+############################################################################
+# apps/examples/posix_stdio/Make.defs
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+ifneq ($(CONFIG_EXAMPLES_POSIX_STDIO),)
+CONFIGURED_APPS += $(APPDIR)/examples/posix_stdio
+endif
diff --git a/examples/posix_stdio/Makefile b/examples/posix_stdio/Makefile
new file mode 100644
index 000000000..537176133
--- /dev/null
+++ b/examples/posix_stdio/Makefile
@@ -0,0 +1,32 @@
+############################################################################
+# apps/examples/posix_stdio/Makefile
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(APPDIR)/Make.defs
+
+PROGNAME  = $(CONFIG_EXAMPLES_POSIX_STDIO_PROGNAME)
+PRIORITY  = $(CONFIG_EXAMPLES_POSIX_STDIO_PRIORITY)
+STACKSIZE = $(CONFIG_EXAMPLES_POSIX_STDIO_STACKSIZE)
+MODULE    = $(CONFIG_EXAMPLES_POSIX_STDIO)
+
+MAINSRC = posix_stdio.c
+
+include $(APPDIR)/Application.mk
diff --git a/examples/posix_stdio/posix_stdio.c 
b/examples/posix_stdio/posix_stdio.c
new file mode 100644
index 000000000..722f088ca
--- /dev/null
+++ b/examples/posix_stdio/posix_stdio.c
@@ -0,0 +1,100 @@
+/****************************************************************************
+ * apps/examples/posix_stdio/posix_stdio.c
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * This is a single POSIX example that works for both Nuttx and Linux distros
+ * (with minimal changes). By this example its possible to learn how to use
+ * posix style and also works with onpen(), close() and write() functions.
+ *
+ * For linux, need to change the headers and the output device
+ * A) Headers:
+ *     #include <fcntl.h>
+ *     #include <unistd.h>
+ *     #include <stdio.h>
+ *     #include <string.h>
+ *
+ * B) output:
+ *     /dev/tty
+ *
+ * To compile it on Linux, you can simple use gcc:
+ *  gcc posix_stdio.c -o posix_stdio
+ *
+ * To run, just send the following command: ./posix_stdio
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <stdio.h>
+
+/****************************************************************************
+ * Pre-processor Definitions
+ * *************************************************************************/
+
+/* define how many times the message will be printed in the console */
+
+#ifndef PRINT_N_TIMES
+#  define PRINT_N_TIMES 10
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+static void print_message(int fd)
+{
+  const char *message = "Hello, NuttX users, welcome!!!\n";
+
+  write(fd, message, strlen(message));
+}
+
+/****************************************************************************
+ * hello_nuttx_main
+ ****************************************************************************/
+
+int main(int argc, char *argv[])
+{
+  int counter;
+  int fd = open("/dev/console", O_WRONLY);
+
+  if (fd < 0)
+    {
+      fprintf(stderr, "Failed to open console\n");
+      return 1;
+    }
+
+  for (counter = 0; counter < PRINT_N_TIMES; counter++)
+    {
+      print_message(fd);
+    }
+
+  close(fd);
+  return 0;
+}
+

Reply via email to