gpt4 book ai didi

C 使用预定义消息将标准输出重定向到文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:48 25 4
gpt4 key购买 nike

我想使用 dup() 和 dup2() 复制当我点击 case 's' 到为 case 'f' 打开的文件时在 stdout 中打印的消息。

我不确定 dup 系统调用如何工作以及如何将标准输出复制到文件中。我知道我必须使用 dup 来捕获 stdout 指向的内容,然后使用 dup2 在屏幕和文件之间切换。

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

#define BUFFER_SIZE 128
#define PERMS 0666

int main(int argc, char *argv[])
{
char outBuffer[BUFFER_SIZE] = "This is a message\n";
int count;
int fd;
char input =0;
int a;

if(argc!=2){
printf("Provide an valid file as an argument\n");
exit(1);
}

if((fd = open(argv[1],O_CREAT|O_WRONLY|O_APPEND,PERMS)) == -1)
{
printf("Could not open file\n");
exit(1);
}

printf("0 to terminate, s to write to stdout, f to write to file\n");
do{
scanf(" %c", &input);
switch(input)
{

case 'f':

case 's':
write(1,outBuffer,strlen(outBuffer));
break;

default:
printf("Invalid Choice\n");

}
}while(input != '0');

close(fd);
return 0;
}

最佳答案

dup 系统调用复制文件描述符,为程序创建第二个句柄以写入第一个连接的任何地方。

不会复制 i/o channel 上进行的任何事件。如果你想要那样,你将不得不进行两次(或更多次)写入。

关于C 使用预定义消息将标准输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667136/

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