2
다음 코드는 linux에서 sysyem 호출을 사용하여 파일을 열고 터미널에 데이터를 쓰도록 작성했습니다.C (File Descriptor)의 시스템 호출
파일 설명자 (fd)의 값을 읽으려면 값을 할당해야합니다. 우리가 알고있는 것처럼 else 문, else else part 또는 else part에서 한 번에 구현할 부분. 그래서 다음 코드에 따라 fd는 if if else 행에서만 값을 갖습니다. 그러나 파일 이름을 전달하고이 프로그램을 실행하면 파일이 열립니다. read() 시스템 호출에서 while 루프에서 파일 열기가 발생하지만 루프가 다른 부분에 있고 파일 설명자가 이론적으로 값을 가질 수 없기 때문에 읽기 기능이 파일을 정확히 인식합니까? .
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#define SIZE 10
int main(int argc, char *argv[])
{
int fd,n;
char buff[SIZE];
if(argc != 2)
{
printf("USAGE : %s\n",argv[0]);
exit(1);
}
else if ((fd = open(argv[1],0)) == -1)
{
perror("STATUS");
exit(1);
}
else
{
while((n = read(fd,buff,SIZE)) > 0)
{
write(1,buff,SIZE);
}
close(fd);
}
}
'else if ((fd = open (argv [1], 0)) == -1)''fd'는'open'에서 반환 된 값을가집니다. 이것이 C에서 작동하는 방식입니다. 디버거 사용 방법을 배우고 프로그램을 단계별로 실행하면 이해할 수 있습니다. –
함수 :'read()'는'int'가 아니라'ssize_t'를 반환합니다. – user3629249
오류 메시지를 출력 할 때'stdout'가 아니라'stderr'에 출력해야합니다. 그러므로, fprintf (stderr, USAGE : % s \ n ", argv [0]); ' – user3629249