今天写了一个UNIX2DOS工具,用于把UNIX系统的文本转换成DOS(Windows)下支持的文本。
两大操作系统文本主要的不同在于换行时UNIX里只有 '\n'字符,而在DOS(Windows)下变成了'\r\n'。
废话不多说,此工具用C语言写成,源代码如下:
//
unix2dos
//
#include
<
stdio.h
>
#include
<
stdlib.h
>
int
main(
int
argc,
char
*
argv[])
{
int
ch;
FILE
*
fpinPtr,
*
fpoutPtr;
if
(argc
!=
3
)
{
printf(
"
UNIX2DOS program.\n\n
"
);
printf(
"
Usage: command source_file target_file\n
"
);
printf(
"
Usage example: \
"
unix2dos src.txt obj.txt\
"
\n
"
);
exit(EXIT_FAILURE);
}
if
((fpinPtr
=
fopen(argv[
1
],
"
rb
"
))
==
NULL)
{
printf(
"
Input file \
"
%
s\
"
could not be opened\n
"
,argv[
1
]);
exit(EXIT_FAILURE);
}
if
((fpoutPtr
=
fopen(argv[
2
],
"
wb
"
))
==
NULL)
{
printf(
"
Outout file \
"
%
s\
"
could not be opened\n
"
,argv[
2
]);
exit(EXIT_FAILURE);
}
while
(
!
feof(fpinPtr))
{
ch
=
fgetc(fpinPtr);
if
(ch
>-
1
&&
ch
!=
'
\n
'
)
{
fputc(ch,fpoutPtr);
}
else
if
(ch
>-
1
)
{
fputc(
'
\r
'
,fpoutPtr);
fputc(ch,fpoutPtr);
}
}
fclose(fpinPtr);
fclose(fpoutPtr);
return
0
;
}
当然,还有一个附加产品:DOS2UNIX,源代码如下:
//
dos2unix
//
#include
<
stdio.h
>
#include
<
stdlib.h
>
int
main(
int
argc,
char
*
argv[])
{
int
ch;
FILE
*
fpinPtr,
*
fpoutPtr;
if
(argc
!=
3
)
{
printf(
"
DOS2UNIX program.\n\n
"
);
printf(
"
Usage: command source_file target_file\n
"
);
printf(
"
Usage example: \
"
DOS2UNIX src.txt obj.txt\
"
\n
"
);
exit(EXIT_FAILURE);
}
if
((fpinPtr
=
fopen(argv[
1
],
"
rb
"
))
==
NULL)
{
printf(
"
Input file \
"
%
s\
"
could not be opened\n
"
,argv[
1
]);
exit(EXIT_FAILURE);
}
if
((fpoutPtr
=
fopen(argv[
2
],
"
wb
"
))
==
NULL)
{
printf(
"
Outout file \
"
%
s\
"
could not be opened\n
"
,argv[
2
]);
exit(EXIT_FAILURE);
}
while
(
!
feof(fpinPtr))
{
ch
=
fgetc(fpinPtr);
if
(ch
>-
1
&&
ch
!=
'
\r
'
)
{
fputc(ch,fpoutPtr);
}
}
fclose(fpinPtr);
fclose(fpoutPtr);
return
0
;
}
参考代码源:HP UNIX CP命令 ,欢迎各位高手批评指正。
Wednesday, May 06, 2009