有没有一个C函数可以打印到stderr而不使用printf或puts或它们家族中的任何函数?
eimct9ow1#
使用write系统调用:
write
#include <unistd.h> #include <string.h> int main(int argc, char *argv[]) { char buf[] = "Hello, world!\n"; write(2, buf, strnlen(buf,sizeof(buf))); }
qyswt5oh2#
使用stdio.h中的fwrite,它将数组中的数据写入文件:
stdio.h
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
该函数允许您指定文件。在您的情况下可以是stderr:
stderr
char str[] = "This is a string"; fwrite(str, sizeof(char), strlen(str), stderr);
wlp8pajw3#
您可以使用标准fwrite()函数并指定stderr作为最后一个参数:
fwrite()
#include <stdio.h> size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
或者,您可以在符合POSIX的系统上使用write系统调用,并将STDERR_FILENO指定为第一个参数:
STDERR_FILENO
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);
o4tp2gmn4#
使用普通的标准C,只有您提到的函数可以写入stdout、stderr,并从stdin读取。但是,这些都是基于UNIX标准的输出、错误和输入文件描述符建模的,因此,如果您使用的是Linux或macOS等系统,则可以使用the write system call写入STDERR_FILENO和STDOUT_FILENO(在the <unistd.h> header file中定义)。Windows当然也有类似的东西,比如GetStdHandle和WriteFile。
stdout
stdin
STDOUT_FILENO
<unistd.h>
GetStdHandle
WriteFile
4条答案
按热度按时间eimct9ow1#
使用
write
系统调用:qyswt5oh2#
使用
stdio.h
中的fwrite
,它将数组中的数据写入文件:该函数允许您指定文件。在您的情况下可以是
stderr
:wlp8pajw3#
您可以使用标准
fwrite()
函数并指定stderr
作为最后一个参数:或者,您可以在符合POSIX的系统上使用
write
系统调用,并将STDERR_FILENO
指定为第一个参数:o4tp2gmn4#
使用普通的标准C,只有您提到的函数可以写入
stdout
、stderr
,并从stdin
读取。但是,这些都是基于UNIX标准的输出、错误和输入文件描述符建模的,因此,如果您使用的是Linux或macOS等系统,则可以使用the
write
system call写入STDERR_FILENO
和STDOUT_FILENO
(在the<unistd.h>
header file中定义)。Windows当然也有类似的东西,比如
GetStdHandle
和WriteFile
。