Chinaunix首页 | 论坛 | 博客
  • 博客访问: 277496
  • 博文数量: 58
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-27 08:37
个人简介

从linux了解世界

文章分类
文章存档

2017年(5)

2016年(51)

2015年(2)

我的朋友

分类: C/C++

2016-07-30 13:48:11

系统调用

关于函数的信息可用man 2 名字(2代表内核可以调用的函数和工具),尤其看要添加那些头文件
int creat (const char *pathname,mode_t mode);成功返回0,失败返回-1

int open(const char *pathname, int flags, mode_t mode);成功返回文件描述值fd,失败返回-1
flag宏定义:
O_RDONLY
O_WRONLY
O_RDWR
O_CREAT不存在就创建,权限为mode(mode只在有O_CREAT 时有效)

int close(int fd);成功返回0,失败返回-1

void exit(int status);0正常退出,其他表示程序执行中有错误。宏定义EXIT_SUCCESS为0,EXIT_SUCCESS为1。

ssize_t read(int fd, void *buf, size_t count);从文件描述符fd指定的文件中读取length个字节到buf指向的缓冲区,返回值为实际读取字节数。错误返回-1。

ssize_t write(int fd, const void *buf, size_t count);同上

off_t lseek(int fd, off_t offset, int whence);将文件指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。

whence可用下列宏:
SEEK_SET:文件头
SEEK_CUR:当前指针位置
SEEK_END:文件尾
计算文件长度:length=lseek(fd,0,SEEK_END)

int access(const char *pathname, int mode);判断文件是否可以进行某种操作,mode要判断的权限R_OK,W_OK,X_OK,F_OK(是否存在)。测试成功返回0,不符返回-1。

stderr:标准错误输出,对应文件描述符2;stdout:标准输出,对应文件描述符1;stein:标准输入,对应文件描述符0。输出默认到显示器,输入默认键盘。

用>和2>重定向输出,可以从文件输出(不存在则创建,存在则覆盖原有信息)>>可以当文件存在时在最下面输出。用<重定向输入,可以从文件输入。<< key从键盘输入关键字后代表输入结束,省去ctrl+d了。

ps:用gcc做c++文件的编译时发现ubuntu是没有安装g++的,所以要安装和gcc版本匹配的g++来用它的库,gcc和g++在编译的时候是一样的,链接时该用那个用哪个。

当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息:
void perror(const char *s)
用来将上一个函数发生错误的原因输出到标准错误(stderr),参数s 所指的字符串会先打印出,后面再加上错误原因 字符串。此错误原因依照全局变量 errno 的值来决定要输出的字符串。
char *strerror(int errno)
将错误代码转换为字符串错误信息,可以将该字符串和其它的信息组合输出到用户界面例如
fprintf(stderr,"error in CreateProcess %s, Process ID %d ",strerror(errno),processID)
注:假设processID是一个已经获取了的整形ID

库函数调用
FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 同上

int ferror(FILE *stream);ferror,函数名,在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。在执行fopen函数时,ferror函数的初始值自动置为0。

int fclose(FILE *stream);如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。

int fgetc(FILE *stream);这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF(-1),你必须通过ferror或feof来区分这两种情况。EOF是在头文件 stdio.h中定义的宏。

int fputc(int c, FILE *stream);在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

int fscanf(FILE *stream, const char *format, ...);功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。返回值:整型,成功读入的参数的个数,发生错误时返回一个负值EOF.

int fprintf(FILE *stream, const char *format, ...);fprintf()的返回值是输出的字符数,发生错误时返回一个负值EOF.

int fseek(FILE *stream, long offset, int whence);fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。偏移量后加L表示long型

char *getcwd(char *buf, size_t size);函数说明 getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。在调用此函数时,buf所指的内存空间要 足够大,若工作目录绝对路径的字符串长度超过参数size大小,则回值NULL,errno的值则为ERANGE。倘若参数buf为 NULL,getcwd()会依参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会依工作目录绝对 路径的字符串程度来决定所配置的内存大小,进程可以在使用完此字符串后利用free()来释放此空间。
返回值 执行成功则将结果复制到参数buf所指的内存空间,或是返回自动配置的字符串指针。失败返回NULL,错误代码存于errno。

int mkdir(const char *pathname, mode_t mode);若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。

#include
int main(void)
{
    FILE *fp = NULL;
    char tmp[100];
    fp = fopen("/opt/C_lanuage/fopen_fread/tmp.txt", "r");
    if (NULL == fp)
    {
        printf("file open Fail!\n");
        return -1;
    }
    fread(tmp, 1, 100, fp);
    printf("%s\n", tmp);
    fclose(fp);
    fp = NULL;
    return 0;
}

在文件操作时,需要注意以下几点问题
1、在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;
2、文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。
3、文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦;如:fp = NULL;

%d:读入一个十进制整数.
%i :读入十进制,八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.
%u:读入一个无符号十进制整数.
%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.
%x %X: 读入十六进制整数.
%o': 读入八进制整数.
%s : 读入一个字符串,遇空字符‘\0'结束。
%c : 读入一个字符。无法读入空值。空格可以被读入。
阅读(1590) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~