printf 遇到bash重定向】的更多相关文章

在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout); 方法一: 1 2 3 4 5 6 7 8 9 10 11   #include <stdio.h>  int main(void) {    setvbuf(stdout,NULL,_IONBF,0);      char aa[20];    printf ("input:");    scanf("%…
1. 基础知识 文件描述符(File Descriptor),是进程对其所打开文件的索引,形式上是个非负整数.类 Unix 系统中,常用的特殊文件描述符如下: 文件描述符 名称 常用缩写 默认值 0 标准输入 stdin 键盘 1 标准输出 stdout 屏幕 2 标准错误输出 stderr 屏幕 我们在简单地用 < 或 > 时,相当于使用 0< 或 1> (下面会详细介绍). 管道 (“|”, pipe line),把上一个命令的 stdout 接到下一个命令的 stdin; t…
printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的重定向. 使用KEIL5对stm32的printf函数进行重定向,有两种方法:一种是使用微库,另一种是不使用微库. 方法1--使用微库: 1.使用微库,在KEIL5中点击options for target,在Target标签下有个Use MicroLIB---勾选,使用微库. 2.在串口文件中添加…
APUE 3.5关于重定向有个容易迷惑人的问题: ./a.out > outfile 2>&1 ./a.out 2>&1 > outfile 问两者区别? int main() { printf("output to stdio\n"); fprintf(stderr,"output to stderr\n"); ; } 结果如下: qun@ThinkPad ~/tmp $ ./a.out > outfile >&…
写了一个小工具,使用System.out.printf()输出日志,以方便使用者查看,在终端显示没有问题,但重定向到文件就有问题了,会出现一些很奇怪的乱序现象. 上网查询资料,判断应该是跟重定向和Linux缓冲区有关,标准输出为行缓冲,文件为全缓冲,可以使用 stdbuf -oL [command] 来实现重定义缓冲区类型,于是将原先的启动脚本中的 nohup java ... & 改为 nohup stdbuf -oL ... & , 这样改完后用vim命令查看文件内容是正常的,但使用t…
1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm32f1xx_hal.h" extern UART_HandleTypeDef huart1; uint8_t ch; uint8_t ch_r; //重写这个函数,重定向printf函数到串口 /*fputc*/ int fputc(int c, FILE * f) { ch=c; HAL_UART…
概述 进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向. 重定向 重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的.我们只要重写putchar函数,就可以对printf进输出重定向. 代码清单 下面是自己在Keil 5环境下,使用单片机STC12测试print…
cnblogs原创 下面几种bash重定向各表示什么意思? find / -name passwd > /dev/null >& > /dev/null find / -name passwd &> /dev/null find / -name passwd >& /dev/null 上面有5种重定向,分别表示: 1. 将find结果重定向到 /dev/null,这个find结果指的是标准输出,不含标准错误,比如以非root用户身份运行这个命令时,可能…
之前是完全不知道printf可以重定向设置 最近才发现还有这等好事,可以让printf直接实现串口打印 在网上找了很多资料,终于实现了我想要的效果 原理:printf是通过调用底部的fputc来实现打印效果的,所以如果我们重写fputc就能实现printf函数的重定向 也就是我们让fputc函数直接通过串口进行打印数据,则printf也可以通过串口打印数据 当然scanf也是一样的,我们也可以通过重写fgetc来实现串口接收数据 先随便新建一个C文件,然后添加到include路径里面(总之就是加…
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47176.html 在STM32串口通信程序中使用printf发送数据,非常的方便.可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了.   下面就说一下使用printf需要做哪些配置.   有两种配置方法:   一.对工程属性进行配置,详细步骤…
要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中.重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数时,优先采用用户编写的函数,这样用户就可以实现对库的修改了.为了实现重定向printf()和scanf() 函数,我们需要分别重写fputc()和fgetc() 这两个C 标准库函数. 一.移植printf()函数,重定向C库函数printf到USART1 int fputc(int ch, FIL…
下面是Linux下的bash对拍程序: #!/bin/bash t=0 //数据组数 while true; do let "t=$t + 1" echox printf $t //bash语言的变量前需要加 $ printf ": " ./datamaker > input //数据生成器 ./color < input > output //需要对拍的程序 ./std < input > stdout //标程 if diff ou…
下面是\(Linux\)下的\(bash\)对拍程序: #!/bin/bash t=0 //数据组数 while true; do let "t=$t + 1" echox printf $t //bash语言的变量前需要加 $ printf ": " ./datamaker > input //数据生成器 ./color < input > output //需要对拍的程序 ./std < input > stdout //标程 if…
在嵌入式中,经常需要用到printf来调试程序 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. printf输出到串口,需要将fputc里面的输出指向串口(重定向) 因此,实现printf就需要重定向相关的函数.有的时候,我们想自己实现printf的功能,不妨自己写一个 #include <stdarg.h> #include <stdio.h> #include <unistd.h> #define BU…
使用 VSCode 给STM32配置一个串口 printf 工程 gcc 重定向 printf 和 keil 不一样. 文件准备 先从以前的工程中拷过一份串口的代码来,然后在 main 函数中初始化串口并 print 一个数据吧. 新添加的文件需要添加到 Markfile 文件中,否则编译肯定会报错的.同时为了 vscode 不报错也把 include 路径在 c_cpp_properties.json 中放一份. .h 文件路径 -> Makefile + c_cpp_properties.j…
案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即写失败. 分析: 原本以为是bash重定向机制导致的问题,于是将重定向取消,改为使用fprintf,而非printf.即在C程序内部进行写文件.发现问题依旧.(排除fopen打开失败的因素) 仔细观察,发现问题集中在两个层面,一个是ctrl+c到底做了什么,二是写文件操作为什么失败. 首先,ctrl…
一.Shell传递参数 #!/bin/bash # 假设在脚本运行时写了三个参数 ..,,则 "(传递了三个参数). echo "-- \$* 演示 --" for i in "$*"; do echo $i done echo "-- \$@ 演示 --" for i in "$@"; do echo $i done 运行: $ sh shell.sh -- $* 演示 -- -- $@ 演示 -- 二.Shell…
VIM编译器的安装与使用 vim编辑器安装 在CentOS中,执行:yum -y install vim 普通模式 h: 左移一个字符 j: 下移一行 k: 上移一行 l: 右移一个字符 PageDown(或Ctrl+F):下翻一屏 PageUp(或Ctrl+B):上翻一屏 G:移到缓冲区的最后一行 num G:移动到缓冲区中的第num行 gg:移到缓冲区的第一行 命令行模式 普通模式下按下冒号键 保存.退出命令: q:如果未修改缓冲区数据,退出 q!:取消所有对缓冲区数据的修改并退出 w fi…
1.查看ASCII码表 man 7 ascii  很多人初学编程都会接触到ascii码的概念,有时候为了查某个符号的ascii值,可能还得翻箱倒柜找出当年的课本?Linux Manpage里面其实包含了很多类似的实用资料,上述命令就能很详细的方式解释ascii编码,当然这里还有在线版. man命令的第二个参数是区域码,用来区分索引词的范围,比如printf,在C标准库里面的printf跟bash当中的printf是不同的,前者的查询是man 3 printf,后者是man 1 printf.如果…
在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息. 2.Ctrl+l(小写的L).这是一个清屏的快捷键,这个是笔者在工作中用得最多的一种清屏方式,清屏效果同clear命令一样. 3.reset命令.这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但…
============================= 一般 ========================================= chown -R oracle:oinstall u01/ @ chown -R .oinstall u01/ chmod -R 744 u01/ @ chmod u=rwx,g=rx,o=r u01/ @ chmod u+x u01/ ( 注意u=rwx,g=rx,o=r之间不能有空格) chgrp -R oinstall u01/ cd pwd…
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行的角色是不一样的: #shell scripts(UNIX Like系统的原则有一条:程序越短越好) #bash csh tcsh ksh #which startx(查看文件的路径) /usr/X11R6/bin/startx #vi `which startx` #!/bin/sh …… #vi…
原文地址:http://www.cnblogs.com/5201351/p/4208277.html 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息. 2.Ctrl+l(小写的L).这是一个清屏的快捷键,这个是笔者在工作中用得最多的一种清屏方式,清屏效果同clear命令一样. 3…
1.html代码 <form id = "form" name="form" method="post" action="../cgi-bin/Hello.cgi"> <p></p> <input type="text" name="cmd1" id="user" value= "用户名"/> <…
使用STM32CUBE_MAX配置工程,可以简化编程工作量,但是这样我们会遇到一些麻烦,比如利用串口接收不知道长度的数据的时候,我们可能会无从下手,前段时间看到他人程序中的串口不定长接收,此次特意总结,包括3类芯片串口不定长配置. STM32F103ZET6 配置工程: 选择USART1,配置波特率为115200,并开启串口中断,DMA中断 配置程序 在配置工程后,我们需要在工程中printf重定向函数fputc()和重写串口接收函数 UsartReceive_IDLE()代码如下: // 在头…
Admin05 useradd 添加用户usermod 修改用户属性userdel -r 删除用户 groupadd 添加组gpasswd -a | -d | 管理组成员groupdel 删除组groupmod 修改组属性 ############################## 用户管理 用户账号:1.可以登录操作系统 2.实现访问控制(不同的用户的访问权限不同) 组账号:方便对用户的管理(权限方面) 唯一标识:UID GID (相当于身份证号) 管理员的UID:0 组分类:基本组(私有组…
在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息. 2.Ctrl+l(小写的L).这是一个清屏的快捷键,这个是笔者在工作中用得最多的一种清屏方式,清屏效果同clear命令一样. 3.reset命令.这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但…
前言 串口调试是单片机开发过程必不可少的一个功能,一般是使用一个UART-TTL的串口模块来实现串口的功能,其实下载调试使用的Jlink仿真器也可以实现串口调试的功能,本篇文章将介绍如何使用Jlink实现虚拟串口功能. ITM简介 ITM是ARM Cortex-M系列内核芯片中的一种全新的调试功能,可以方便的通过调试器来实现printf调试功能.来自STM32中文参考手册的介绍: ITM ( 指令跟踪微单元 instrumentation trace macrocell):ITM是一应用驱动的跟…
多态 (一) 先编写函数: #include <iostream> using namespace std; class Shape { protected: int width, height; public: Shape( int a = 0, int b = 0) { width = a; height = b; } int area() { cout << "Parent class area :" <<endl; return 0; } }…
本节目标: 1,文件共享 打开文件内核数据结构 一个进程两次打开同一个文件 两个进程打开同一个文件 2,复制文件描述符(dup.dup2.fcntl) 一,文件共享 1,一个进程打开两个文件内核数据结构 说明: 文件描述符表:每个进程都有一张,彼此独立,每个文件描述符表项都指向一个文件表,文件描述符0(STDIN_FILENO).1(STDOUT_FILENO).2(STDERR_FILENO),默认已经打开,分别表示:标准输入,标准输出,标准错误设备. 文件表:每打开一个文件就对应一张文件表,…