getchar()을 사용하여 입력을 읽을 때 문자를 전송하는 데 사용 된 개행 문자와 입력 된 문자를 소비해야합니다.C : Read() 및 개행 문자 사용
그러나 read()를 사용하여 입력을 버퍼로 읽으려고합니다. 프로그램이 키보드 또는 입력 파일에서 읽을 수 있습니다. 프로그램에 문자를 입력하면 문자와 개행 문자가 읽히지 만 첫 문자를 넘어 입력 된 문자는 버퍼로 읽히지 않습니다. 나는이 작품을 읽는 방법 오해
Ready to read.
a
First status: 2.
Read a : a
Ready to read.
b
First status: 2.
Read a : newline
Ready to read.
a
First status: 2.
Read a :
Ready to read.
b
First status: 2.
Read a :
Ready to read.
g
First status: 2.
Read a :
Ready to read.
e
First status: 2.
Read a :
Ready to read.
First status: 0.
Read a :
Printing read in chars:
e
newline
(blank)
(blank)
(blank)
(blank)
(blank)
오전 : 나는 그것을 실행할 때
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
//Success/failure of read
int read_status = 1;
//Success/failure of write
int write_status = 1;
//Buffer for reads/writes
char buffer[BUFSIZ] = {0};
int charsRead;
for(charsRead = 0; charsRead < BUFSIZ && read_status > 0; charsRead++)
{
fprintf(stderr, "Ready to read.\n");
read_status = read(0, buffer, 2);
fprintf(stderr, "First status: %i.\n", read_status);
fprintf(stderr, "Read a : ");
if(buffer[charsRead] == '\n')
{
fprintf(stderr, "newline\n");
}
else if(buffer[charsRead] == ' ')
{
fprintf(stderr, "space\n");
}
else
{
fprintf(stderr, "%c\n", buffer[charsRead]);
}
}
fprintf(stderr, "Printing read in chars: \n");
for(int i = 0; i < charsRead; i++)
{
if(buffer[i] == '\n')
{
fprintf(stderr, "newline\n");
}
else if(buffer[i] == ' ')
{
fprintf(stderr, "space\n");
}
else
{
fprintf(stderr, "%c\n", buffer[i]);
}
}
}
그래서,이 출력을 생성? 새 줄을 사용하려고 시도한 후 첫 번째 줄 뒤에 다른 줄을 추가하려고 시도했지만 문제가 해결되지 않습니다.
이 프로그램은 stdout (파이프가 될 것임)에도 쓰고 있습니다. 이 사건을 위해 특별히 고려해야 할 사항이 있습니까?