Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    57

    [C] manipolare buffer nella write

    codice:
    #include "ourhdr.h" #include <string.h>  int main(int argc, char *argv[]){ 	int fd,fd1; 	char *buffer;  	buffer=(char*)malloc(25*sizeof(char)); 	umask(0000); 	if(fd=open("File",O_CREAT|O_EXCL|O_WRONLY,0200)<0){ 		fd=open("File",O_TRUNC|O_WRONLY); 		fchmod(fd,0200); 	} 	link("File","H-File");	 	fd1=open("H-File",O_WRONLY); 	fchmod(fd1,0600); 	symlink("File","S-File");         int i=0;         while(i<10){        	        write(fd1,buffer[i],1);                 lseek(fd1,1,SEEK_CUR);                 i++;         } 	exit(0); }
    ciao a tutti ho un problema, devo scrivere un programma che utilizzi solo system call e che prende in input una stringa che sia almeno lunga 10 caratteri e che scriva tali lettere in un hard link, l'una accanto all'altra separate da spazi, ho cercato di abbozzare un programma ma non riesco ad ottenere il risultato finale,il mio problema è che la system call write non prende in input il singolo char, per cui non so come poter passare il singolo carattere alla write.
    spero di aver spiegato bene il mio problema.

    grazie anticipatamente
    †NN PUò PIOVERE PER SEMPRE†

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Se devi scrivere un carattere alla volta la write va riscritta come

    codice:
    write(fd1, buffer + i, sizeof(char));
    dove buffer + i indica di volta in volta l'indirizzo del carattere da scrivere.

    A parte questo comunque:

    1) in "buffer" non mi sembra ci sia qualcosa di significativo, allochi spazio dinamicamente ma poi non ci scrivi nulla;
    2) se la tua intenzione con quella lseek() è di lasciare uno spazio ogni volta, ti faccio notare che in realtà in questo modo stai lasciando dei "buchi", non degli spazi (vedi la documentazione di lseek);
    3) non mi convince parecchio quella seconda open() sul file in caso di fallimento della prima, probabilmente si può sostituire tutto con una sola open() con le giuste opzioni.

    Ah sarebbe anche meglio postare il codice in maniera più human-compliant. Un compilatore è in grado di parsare tutto anche su una sola linea (a parte le direttive #include), ma noi non siamo compilatori.
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.