2012-06-16 4 views
0

처음에는 유감스럽게 생각합니다. (물론 그렇습니다.)하지만 유닉스에서 Syscall을 사용하는 것에 대해 정말 새로운 점이 있습니다. "write"를 사용하여 파일에 무언가를 쓰려고했습니다. 파일을 제대로 만들었지 만 코드는 없습니다.성공적인 쓰기는 파일에 아무 것도 쓰지 않습니다.

int main(void) { 
    int fd; 
    char *string = "Test"; 
    if(fd=open("home/user/test.txt", O_WRONLY | O_APPEND | O_CREAT)==-1){ 
    perror("Open failed"); 

    } 
    printf("%d\n", strlen(string)); 
    printf("Wrote %d byte on the file", write(fd,string,strlen(string))); 
    close(fd); 
    return 0; 
} 

어디에서 문제가 발생합니까? 는

+0

반환 값은 무엇입니까? 두 번째 printf에 뭐하고 있니? – Jay

답변

6

문제는이 줄 것으로 보인다 감사합니다가 먼저 평가되도록

fd=open("home/user/test.txt", O_WRONLY | O_APPEND | O_CREAT)==-1 

평등 한 비교 연산자 ==가 더 높은 우선 순위를 가지고있다. 따라서 파일 설명자 번호를 fd에 할당하는 대신 비교 결과를 fd에 할당합니다.

괄호 안의 부분을 둘러싸 기 위해 ()으로 간단하게 고정 할 수 있습니다.

+0

오, 네가 맞아, 고마워. ^^ – cifz

관련 문제