LINUX系统编程 LINUX地区(locale)设置

LINUX本地的locale设置使用/etc/sysconfig/i18n进行设置,
这里的i18n是术语internationalization的缩写i加上18字符
在加上n,这样更为方便,同时区一样LINUX地区系统维护在
/usr/share/locale中,该目录下每个目录都是特定地区信息
的集合,目录的约定为:
language(ISO语言代码)[_territory(ISO国家代码)[.codeset(字符集)]][@modifier(如果前面都一样这个用于区分)]
一般只包含language(语言)_territory(国家)

如: 
zh_CN:中文-中国
en_US:英文-美国
fr_CH:瑞士-法语 

而每一个目录包含了具体的规则如:
LC_CTYPE:字符分类,大小写转换
LC_COLLATE:字符集排序规则
LC_MONETARY:对币值的格式化规则
LC_NUMERIC:对比值以外数据的格式化隔着
LC_TIME:时间日志的规则
LC_MESSAGES:
我们可以locale 查看这些信息,如果设置i18n为一个不存在的目录那么将会报错
[root@testmy locale]# more /etc/sysconfig/i18n 
LANG="123.UTF-8"
[root@testmy locale]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

这里我们注意一下:
LANG
LC_ALL
LC_*
i18n配置文件
的区别

i18n<LANG<LC_* 
也就是LANG会比i18n优先级高,LC_*比LANG高,而LC_ALL实际就是一次设置全部的LC_*而已
但是一旦设置了LC_ALL就不能设置LC_*了,所以一般不用。
一般我们使用LANG来设置全部的LC_*,而独立设置一个LC_*为想要的设置
比如我这里设置LANG=en_US.UTF-8 ,设置LC_TIME=zh_GN.UTF-8
目的在于输出时间以中文形式输出
[root@testmy ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[root@testmy ~]# date
Wed Dec  7 09:02:28 CST 2016
[root@testmy ~]# export LC_TIME=zh_CN.UTF-8
[root@testmy ~]# date
2016年 12月 07日 星期三 09:03:23 CST

使用程序验证LANG的优先级低于LC_TIME
[root@testmy ~]# LANG=zh_CN.UTF-8 LC_TIME=en_US.UTF-8 ./a.out 
ctime() is:Wed Dec  7 10:49:32 2016
asmtime is:Wed Dec  7 10:49:32 2016
stftime() is:Wednesday 2016-12-07 10:49:32 CST
[root@testmy ~]# LANG=en_US.UTF-8 LC_TIME=zh_CN.UTF-8  ./a.out 
ctime() is:Wed Dec  7 10:49:35 2016
asmtime is:Wed Dec  7 10:49:35 2016
stftime() is:星期三 2016-12-07 10:49:35 CST

代码:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include <time.h>
  3. #include <errno.h>
  4. #include <locale.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>
  7. int main(void)
  8. {
  9.         time_t t;
  10.         struct tm *loc;
  11.         char* ctc;
  12.         char* asc;
  13.         char ut[200];
  14.         t = time(NULL);
  15.         if(setlocale(LC_ALL,"") == NULL) //LC_ALL,"" will use env vars
  16.         {
  17.                 perror("setlocale:");
  18.                 exit(1);
  19.         }
  20.         ctc = ctime(&t);
  21.         if ((loc = localtime(&t)) ==NULL)
  22.         {
  23.                 perror("localtime:");
  24.                 exit(2);
  25.         }
  26.         asc = asctime(loc);
  27.         if(strftime(ut,200,"%A %F %T %Z\n",loc) == 0)
  28.         {
  29.                 perror("strftime:");
  30.                 exit(3);
  31.         }
  32.         printf("ctime() is:%sasmtime is:%sstftime() is:%s",ctc,asc,ut);
  33.         return 0;
  34. }
时间: 2024-11-01 04:02:16

LINUX系统编程 LINUX地区(locale)设置的相关文章

LINUX系统编程 LINUX 虚拟内存

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

linux系统编程之文件与I/O(六) fcntl函数与文件锁

一.fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_DUPFD (long) 设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见<linux系

《Linux系统编程(第2版)》——1.4 Linux编程的概念

1.4 Linux编程的概念 本节给出了Linux系统提供的服务的简要概述.所有的UNIX系统,包括Linux,提供了共同的抽象和接口集合.实际上,UNIX本身就是由这些共性定义的,比如对文件和进程的抽象.管道和socket的管理接口等等,都构成了UNIX系统的核心. 本概述假定你对Linux环境很熟悉:会使用shell的基础命令.能够编译简单的C程序.它不是关于Linux或其编程环境的,而是关于Linux系统编程的基础. 1.4.1 文件和文件系统文件是Linux系统中最基础最重要的抽象.Li

Linux系统Gentoo安装Kde5怎么设置

Linux系统Gentoo安装Kde5怎么设置   配置方法: 1.添加kde的overlay: layman -a kde echo -e "-qt5" >> /etc/portage/profile/use.stable.mask 或者在/etc/portage/make.conf的USE中添加qt5. 2.解除kde5的mask 方法一:按官方wiki中的方法做软链接: cd /etc/portage/package.accept_keywords ln -s /va

《Linux系统编程(第2版)》——第1章 入门和基本概念 1.1 系统编程

第1章 入门和基本概念 摆在你面前的是一本关于系统编程的书,你将在本书中学习到编写系统软件的相关技术和技巧.系统软件运行在系统的底层,与内核和系统核心库进行交互.常见的系统软件包括Shell.文本编辑器.编译器.调试器.核心工具(GNU Core Utilities)以及系统守护进程.此外,网络服务.Web服务和数据库也属于系统软件的范畴.这些程序都是基于内核和C库实现的,可以称为"纯"系统软件.相对地,其他软件(如高级GUI应用),很少和底层直接交互.有些程序员一直在编写系统软件,而

《Linux系统编程(第2版)》——导读

前言 这本书是关于Linux上的系统编程."系统编程"是指编写系统软件,其代码在底层运行,直接跟内核和核心系统库对话.换句话说,本书的主题是Linux系统调用和底层函数说明,如C库定义的函数. 虽然已经有很多书探讨UNIX上的系统编程,却很少有专注于探讨Linux方面的书籍,而探讨最新版本的Linux以及Linux特有的高级接口的书籍更是凤毛麟角.此外,本书还有一个优势:我为Linux贡献了很多代码,包括内核及其上面的系统软件.实际上,本书中提到的一些系统调用和系统软件就是我实现的.因

《Linux系统编程(第2版)》——2.12 结束语

2.12 结束语 本章讨论了Linux系统编程的基础:文件I/O.在Linux这样遵循一切皆文件的操作系统中,了解如何打开.读.写和关闭文件是非常重要的.所有这些操作都是传统的UNIX方式,很多标准都涵盖它们.

《Linux系统编程(第2版)》——1.2 API和ABI

1.2 API和ABI 程序员都希望自己实现的程序能够一直运行在其声明支持的所有系统上.他们希望能在自己的Linux版本上运行的程序也能够运行于其他Linux版本,同时还可以运行在其他支持Linux体系结构的更新(或更老)的Linux版本上. 在系统层,有两组独立的影响可移植性的定义和描述.一是应用程序编程接口(Application Programming Interface,API),二是应用程序二进制接口(Application Binary Interface,ABI),它们都是用来定义

《Linux系统编程(第2版)》——1.5 开始系统编程

1.5 开始系统编程 这一章着眼于Linux系统编程的基础概念并从程序员视角探索Linux系统.下一章将讨论基本的文件I/O,这当然包括读写文件,但是由于Linux把很多接口以文件形式实现,因此文件I/O的至关重要性不仅仅是对于文件而言,对于Linux系统的很多其他方面亦是如此. 了解了这些基础知识后,可以开始深入探索真正的系统编程了.我们一起动手吧.