|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2009
Città: Trento
Messaggi: 81
|
[C] problema getopt()
Ciao a tutti, sto programmando un'utility in C che simuli il comportamento di ln di Linux. In sè nulla di difficile, ma ho seri problemi a gestire l'ordine dell'input: il mio problema è che il comando
Codice:
ln -s file1 file2 Codice:
ln file1 -s file2 Codice:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include "fun_list.h"
int main(int argc, char **argv){
int ch;
int option_index=0;
/*
switch per le opzioni
*/
while((ch=getopt(argc,argv,"b:f:hvs:"))!=-1){ /*TODO: controllare bene quali opzioni vogliono parametri (:)*/
switch(ch){
case 'b':
/*TODO: fa backup del file*/
break;
case 'f':
/*TODO: rimuove file destinazione esistenti*/;
break;
case 'h':
/*
mostra l'help del programma
*/
show_help();
exit(1);
break;
case 'v':
/*
mostra la versione del programma
*/
show_version();
exit(0);
break;
case 's':
/*
crea link simbolico anzichè fisico, se fallisce da messaggio di errore
*/
option_index=2;
break;
case '?':
/*
Se l'opzione scelta non è tra quelle implementate
stampa messaggio di errore e mostra come usare my_ln
*/
show_usage();
exit(-1);
break;
default: break;
}
}
/* se ho meno di due argomenti messaggio di errore e stampo come usare programma */
if(argc<2){
printf("Errore: troppi pochi argomenti\n");
show_usage();
exit(0);
}
/* se non ho opzioni faccio hard linking*/
if((option_index==0)&&(argc==3)){
if(link(argv[1],argv[2])==-1){
perror("Errore:");
exit(-1);
}
}
/* se option_index è settato a 2 e ho 4 argomenti faccio link simbolico */
if((option_index==2)&&(argc==4)){
if(symlink(argv[1],optarg)==-1){
perror("Errore:");
exit(1);
}
}
return 0;
}
Codice:
./my_ln file1 -s file2 non capisco cosa sbaglio, sono settimane che ci sbatto la testa...grazie a chi vorrà aiutarmi |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jan 2009
Città: Trento
Messaggi: 81
|
provo ad uppare..
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:28.



















