UNIX/Linux环境编程必须需要注意的问题总结

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1674199

在UNIX/Linux下编程必须需要注意一下几点问题(特别是在运行于Windows上的IDE或编程工具进行开发):

1.大小写问题。

在文件或目录的命名规则中,特别注意驼峰命名法的大小写区分问题。有些语言的内部变量或者引用方面同样也是。

2.权限问题。

不要任意操作文件系统,换句话说,不要动与自己无关的任何文件(UNIX/Linux下一切都是文件),特别是新部署或者应用中要生成新文件时将权限先查看清楚

3.关于unix文件编码问题的再次强调

在运行于Windows上的IDE或编程工具进行开发时特别注意,保存文件时一定要将dos文件格式(file format)转化成unix文件格式。

dos文件格式中换行符为\r\n

unix文件格式中换行符为\n

现在vim和awk对此有了改进,能自动识别,而grep还不能很好的识别,因此一旦用grep这样的工具就会导致出现未知的后果。

附:针对文件格式做的一些测试:


1

2

3

4

5

6

7

8

9

#!/bin/bash   

#chkconfig: 345 86 14    

#description: Startup and shutdown script for ChatterServer(Port:$SERVICEPORT))    

#SERVICEPORT=29093    

#SERVICEPORT=`grep ^port $(pwd)/../conf/constant.properties | awk -F '=' '{print $2}'`    

PORTFILE=$(pwd)/../conf/constant.properties    

#SERVICEPORT=$(cat $PORTFILE | grep ^port | awk -F '=' '{print $2}')    

SERVICEPORT=$(cat $PORTFILE | dos2unix | grep ^port)    

echo "SUCCESS: ChatterServer(Port:$SERVICEPORT) is OK"

上面的constant.properties文件的fileformat如果为dos,如下图所示:   

则就会出现

另一个测试脚本:


1

2

3

4

5

6

7

8

9

10

11

12

cat >./portfile<<eof   

port=1080    

eof    

PIDFILE=./portfile    

cat $PIDFILE    

#SERVICEPORT=$(grep ^port $PORTFILE | awk -F '=' '{print $2}')    

#grep ^port $PORTFILE | awk -F '=' '{print $2}'    

# VS    

cat $PIDFILE | grep ^port | awk -F '=' '{print $2}'    

SERVICEPORT=$(cat $PIDFILE | grep ^port | awk -F '=' '{print $2}')    

echo $SERVICEPORT    

echo "SUCCESS: ChatterServer(Port:$SERVICEPORT) is OK"

针对上面的文件格式问题,可以用IDE或者文件编辑器来处理,例如下图所示的设置:

也可以用vim中的:set ff=unix转换,也可以用dos2unix这样的工具转换,如下面的脚本所示:


1

2

3

4

5

# NOTE: $(pwd)/../conf/constant.properties file fileformat must be unix NOT dos in shell scripts, or will cause some unknown error   

# NOTE: grep is vrey sensitive to dos fileformat or unix fileformat    

# apt-get install dos2unix    

PORTFILE=$(pwd)/../conf/constant.properties    

SERVICEPORT=$(cat $PORTFILE | dos2unix | grep ^port | awk -F '=' '{print $2}')

--end--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1674199

时间: 2025-01-29 22:54:55

UNIX/Linux环境编程必须需要注意的问题总结的相关文章

《编译与反编译技术》—第1章1.8节UNIX/Linux环境中的make和makefile

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.8节UNIX/Linux环境中的make和makefile ,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.8 UNIX/Linux环境中的make和makefile 在UNIX或Linux环境中,make是一个非常重要和经常使用的编译工具.无论是自己进行项目开发还是安装应用软件,都会经常用到make或make install.使用make工具,可以将大型的开发项目分解成

Sendmail在Unix/Linux环境下554错误的解决方法

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Sendmail 是在 Unix/Linux 环境下十分流行媛的邮件发送服务程序.但是其配置十分繁琐,问题也很多.本文解决了不能发信的一个问题. 问题: 每次发送的邮件都报告: ----- Transcript of session follows ----- 554 5.0.0 MX list for example.com. points back to e

Linux环境编程-文件基本操作

  Linux 下目录是/这样的 而windows是怎么记呢?和w是不是一样的反向?所以Linux的目录就是反的反向,好记了. 一:open函数 名称:open 目标:打开一个文件. 头文件:#include #include #include < fcntl.h> 函数原形:int open(const char * pathname,int flags); int open(const char * pathname,int flags,mode_t mode); 参数: pathname

linux环境编程-IPC 之 msg queue

  消息队列 在UNIX的SystemV版本,AT&T引进了三种新形式的IPC功能(消息队列.信号量.以及共享内存).但BSD版本的UNIX使用套接口作为主要的IPC形式.Linux系统同时支持这两个版本. 系统调用msgget() 如果希望创建一个新的消息队列,或者希望存取一个已经存在的消息队列,你可以使用系统调用msgget(). 系统调用:msgget(); 原型:int msgget(key_t key, int msgflg); 返回值:如果成功,返回消息队列标识符 如果失败,则返回-

Linux环境编程-编辑器基本操作

  vim使用 新建文件 #vim hello.c 插入模式 按下I键,底下出现- - 插入- - 换行:按下Enter 删除字符:普通模式下按x 删除整行:按dd 恢复删除:按u 取消命令: Ctrl+R 对U后果弥补 复制:y y2w复制2个单词 y复制包含末尾空格 yy复制行 粘贴:p 退出保存:按ESC,输入:wq 退出不保存:按ESC,输入:q!注意有个惊叹号结尾 查找::/查找的内容 指定行::5 按Enter 第5行 缩进:在当前行输入:再输入:set cindent shiftw

linux环境编程-ftok()函数详解

  系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255). 当成功执行的时候,一个key_t值将会被返回,否则 -1 被返回. 在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值.如指定文件

Unix/Linux环境下多一点不如少一点

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chenguang.blog.51cto.com/350944/69562 正如很多人所知道的$PATH环境变量里存着一张目录列表,当用户要执行某一程序时,系统就会按照列表中的内容去查找该程序的位置.当程序名前不带点斜线 . / 时$PATH就会起作用. 对于普通用户和root用户$PATH里默认是不包含"."来指定用户的当前目录.这在本机进行脚本开发的程序员来说却不方

UNIX/Linux C 程序员需要掌握的七种武器

我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练掌握C语言是最基本的一项技能.关于如何学好C语言,以及C语言话题的讨论,网上有很多经典的文章,我就不一一列举了.在这里,我只想谈一点我个人的体会:刚毕业时,我来到一家比较大的软件公司工作,而公司的工作模式是每个人只负责一个小模块.这样工作两年后,我自认为我的C语言水平已经很高了.后来,我来到现在这家公司.由于

LINUX系统编程 LINUX 虚拟内存

LINUX 虚拟内存 以32位操作系统为例子,因为64位系统虚拟地址过大为2^64,32位仅仅为2^32=4G更利于描述,但是原理东西都一样 这首先要从程序和进程之间的关系开始,我们一般写好一段C\C++代码编译后仅仅为可执行文件假设为a.out,我们 运行a.out的时候,这个才叫进程,进程是OS级别抽象的实体(PCB task_struct结构体),为程序运行进行各种检查和 系统资源分配,一个PCB包含部分信息如下: (摘至刑文鹏LINUX系统编程讲义) * 进程id.系统中每个进程有唯一的