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; +} +