【发布时间】:2018-05-22 23:20:10
【问题描述】:
我正在尝试使用 write() 一次将一个字符写入标准输出一个字节。该程序编译并运行良好,但输出结果并不完全正确。现在我正试图让它通过 write 运行,但在控制台中没有得到任何输出。
void myfunction(char *s, int fd, int n){
for(int i = 0; i != sizeof(s) - 1; ++i){
fprintf(stderr, "%s\n", &s[i]); // This correctly prints out the string
if( write(fd, &s, 1) < 0){ // This will not print to the console
perror("Error: Write problems."); // Have not gotten any errors yet
}
wastesometime(n); // This just calls a for loop that runs n times
}
}
sizeN = sprintf(buffer, "This is process %d with ID %ld and parent id %ld\n", i, (long)getpid(), (long)getppid());
myfunction(buffer, STDOUT_FILENO, n);
目前我正在从 fprintf 获得这种形式的输出:
process 2 with ID 27711 and parent id 27710
rocess 2 with ID 27711 and parent id 27710
ocess 2 with ID 27711 and parent id 27710
cess 2 with ID 27711 and parent id 27710
ess 2 with ID 27711 and parent id 27710
ss 2 with ID 27711 and parent id 27710
s 2 with ID 27711 and parent id 27710
2 with ID 27711 and parent id 27710
2 with ID 27711 and parent id 27710
with ID 27711 and parent id 27710
with ID 27711 and parent id 27710
ith ID 27711 and parent id 27710
th ID 27711 and parent id 27710
h ID 27711 and parent id 27710
ID 27711 and parent id 27710
ID 27711 and parent id 27710
D 27711 and parent id 27710
27711 and parent id 27710
27711 and parent id 27710
7711 and parent id 27710
711 and parent id 27710
11 and parent id 27710
1 and parent id 27710
and parent id 27710
and parent id 27710
nd parent id 27710
d parent id 27710
parent id 27710
parent id 27710
arent id 27710
rent id 27710
ent id 27710
nt id 27710
t id 27710
id 27710
id 27710
d 27710
27710
27710
7710
710
10
0
但我正在尝试使用 write 而不是 fprintf 为每个进程获取此输出:
This is process 2 with ID 27711 and parent id 27710
这可能是相关的,但 fprintf(stderr, %d\n", &s[i]) 有效且 fprintf(stdout, %d\n", &s[i])?我相信stderr 获得优先权,但我不认为其他输出根本不会被打印?
是的,我进行了一些研究,但我发现的大多数答案都使用 fwrite() 或使用 C++,因此不是我想要的。
【问题讨论】:
-
s是如何定义的?什么是不正确的输出,您期望什么? -
你确定没有发送到
stdout吗?甚至不是非打印字符? -
STDOUT_FILENO定义为什么? -
看起来
s是一个字符串(字符数组),&s应该是&s[i]。 -
而
sizeof(s)应该是strlen(s)?