2014-02-25 1 views
0

변수 environ의 내용을 .txt 파일로 쓰려고합니다.open() 및 write() 함수를 C

int archivo = open(argv[1], "rw"); 
int i=0; 
while(environ[i]!=NULL){ 
    write(archivo, environ[i], 1024); 
    i++; 
} 

파일이 생성되었지만 내용이 추가되지 않았습니다. 아무도 이유를 아나요?

+0

http://stackoverflow.com/questions/2229377/writing-an- 정수 - 투 - 파일과 – Tschallacka

+2

당신은 '오픈 (const char * pathname, int flags)'과'fopen (const char * path, const char * mode)'을 혼동하고있다. – aland

+0

네,하지만 그 문제는 i입니다. 쓰기 명령을 사용하여 그것을하고 싶습니다 –

답변

3
  1. open에 대한 올바른 인수를 얻으려면 man 2 open을 참조하십시오. 그것은해야한다 :

    size_t string_length = strlen(environ[i]); 
    size_t wrote = 0; 
    while (wrote < string_length) { 
        size_t bytes_wrote = write(archivo, environ[i] + wrote, string_length - wrote); 
        if (bytes_wrote >= 0) 
         wrote += bytes_wrote; 
        else { 
         perror("write"); 
         abort(); 
        } 
    } 
    
    :

    write(archivo, environ[i], strlen(environ[i])); 
    
  2. 당신은 당신이 쓴 무엇을 실제로 버퍼를 왼쪽 있는지 확인해야합니다 : 당신이 실제로 가지고있는

    open(argv[1], O_WRONLY | O_CREAT | O_TRUNC); 
    
  3. 에만 많은 광고 작성해야

    write은 제출 한 모든 내용을 보증하지 않습니다.

이상적으로 당신은 stdio 전화 fopenfwrite 친화적 훨씬 더 프로그래머을 찾아야한다.

FILE * fp = fopen(argv[1], "w"); 

// loop i 
if (!fwrite(environ[i], strlen(environ[i]), 1, fp)) { 
    perror("fwrite"); 
    abort(); 
} 
+0

실제로'strlen (environ [i]) + 1'이되어서는 안됩니까? (또는 어떤 종류의 구분 기호로 각 글을 따라 가면됩니까?) –

+1

@ElchononEdelson 이진 파일을 쓰지 않는 한 널 종결자를 쓰는 것이 좋습니다. 단락 문자는 나쁜 생각이 아닐 것입니다 :). 아직도 이것은 질문의 일부가 아니 었습니다. –

+1

사실 그것은 질문의 일부가 아니지만 여전히 하나 또는 다른 것이 필요합니다. –

0

파일을 여는 데 플래그를 변경해야한다고 생각합니다. "rw"는 open()을위한 것이 아니라 fopen()을위한 것입니다. 내가 생각

open(argv[1], O_WRONLY); 

가 열려

편집을 사용하여 파일에 쓰기 위해 필요한 최소한 : 내가 링크를 발견 http://pubs.opengroup.org/onlinepubs/009696899/functions/open.html

+0

http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html –

+0

흥미 롭습니다. 어떻게 든 Google은 나에게 구식 링크를 주었다. 감사. – Solidus