gpt4 book ai didi

c - 将输出重定向到 linux 中的文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:45 26 4
gpt4 key购买 nike

我正在编写一个 c 程序,它在 Raspberry PI (Debian Wheezy) 和调制解调器之间建立串行通信。该程序到目前为止有效,但我希望输出也被重定向到 .txt 或 .csv 文件中。

#include <stdlib.h> 
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

#define MODEM "/dev/ttyUSB0"
#define BAUDRATE B9600

int main(int argc,char** argv)
{
struct termios tio;
struct termios stdio;
struct termios old_stdio;
int tty_fd, flags;
unsigned char c='D';
tcgetattr(STDOUT_FILENO,&old_stdio);
printf("Starte bitte %s /dev/ttyUSB0\n",argv[0]);
memset(&stdio,0,sizeof(stdio));
stdio.c_iflag=0;
stdio.c_oflag=0;
stdio.c_cflag=0;
stdio.c_lflag=0;
stdio.c_cc[VMIN]=1;
stdio.c_cc[VTIME]=0;
tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); // make the reads non-blocking
memset(&tio,0,sizeof(tio));
tio.c_iflag=0;
tio.c_oflag=0;
tio.c_cflag=CS8|CREAD|CLOCAL; // 8n1, see termios.h for more information
tio.c_lflag=0;
tio.c_cc[VMIN]=1;
tio.c_cc[VTIME]=5;
if((tty_fd = open(MODEM , O_RDWR | O_NONBLOCK)) == -1){
printf("Error while opening\n"); // Just if you want user interface error control
return -1;
}
cfsetospeed(&tio,BAUDRATE);
cfsetispeed(&tio,BAUDRATE); // baudrate is declarated above
tcsetattr(tty_fd,TCSANOW,&tio);
while (c!='q'){
if (read(tty_fd,&c,1)>0){
write(STDOUT_FILENO,&c,1); // if new data is available on the serial port, print it out
printf("");
}
if (read(STDIN_FILENO,&c,1)>0){
write(tty_fd,&c,1);//if new data is available on the console, send it to serial port
printf("");
}
}
close(tty_fd);
tcsetattr(STDOUT_FILENO,TCSANOW,&old_stdio);
return EXIT_SUCCESS;
}

希望有人能帮帮我

最佳答案

为什么不在你的程序之外这样做呢?

以下将把程序的(标准)输出写入文件 foo.txt:

./myprogram > foo.txt

如果您还想查看输出,通过tee 将其通过管道传输(它将把它的标准输入写入标准输出 一个文件)

./myprogram | tee foo.txt

如果你绝对确定你想在你的程序中完成所有这些,你可能想编写你自己的 write 函数,它写入 stdout 和一个文件。

ssize_t mywrite(int fd, const void *buf, size_t count) {
write(fd, buf, count);
return write(STDOUT_FILENO, buf, count);
}

然后使用它,而不是write(请注意,您应该将已打开文件的文件描述符传递给mywrite;它也会写入标准输出)

关于c - 将输出重定向到 linux 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com