linux——文件2

linux——文件2 1、lseek函数off_t lseek(int fd, off_t offset, int whence);//光标的偏移量fd : 文件描述符Offset 偏移量Whence :SEEK_SET: 参数offset即为新的读写位置SEEK_CUR: 以目前的读写位置往后增加offset个偏移量SEEK_END: 将读写位置指向文件尾后再增加offset个位移量当whence值为SEEK_CUR或SEEK_END时参数offset允许负值的出现。返回值 文件读写距离文件开头的字节大小出错返回 -1#includestdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #includestring.h #define fileName file #define writeNum 128 #define readNum 12 //int close(int fd); //int open(const char *pathname, int flags); //int open(const char *pathname, int flags, mode_t mode); //ssize_t write(int fd, const void *buf, size_t count); //ssize_t read(int fd, void *buf, size_t count); //off_t lseek(int fd, off_t offset, int whence); int main() { int fd; int offset; char readBuff[readNum] {0}; fd open(fileName,O_RDWR|O_CREAT,0755); if(fd -1) { printf(open failed\n); perror(why); return -1; } printf(open successed\n); offset lseek(fd,2,SEEK_CUR); printf(offset is %d\n,offset); read(fd,readBuff,1); printf(%s\n,readBuff); close(fd); return 0; }open里面有个参数也和调整光标有关系O_APPEND 表示追加如果原来文件里面有内容则这次写入会写在文件的最末尾。#includestdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #includestring.h #define fileName file #define writeNum 128 #define readNum 12 //int close(int fd); //int open(const char *pathname, int flags); //int open(const char *pathname, int flags, mode_t mode); //ssize_t write(int fd, const void *buf, size_t count); //ssize_t read(int fd, void *buf, size_t count); //off_t lseek(int fd, off_t offset, int whence); int main() { int fd; int offset; char writeBuff[writeNum] {0}; char readBuff[readNum] {0}; char *test hello world!; strcpy(writeBuff,test); fd open(fileName,O_APPEND|O_RDWR|O_CREAT,0755); if(fd -1) { printf(open failed\n); perror(why); return -1; } printf(open successed\n); printf(offset is %d\n,offset); write(fd,writeBuff[0],12); close(fd); return 0 }而lseek中的SEEK_END也是这个功能#includestdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #includestring.h #define fileName file #define writeNum 128 #define readNum 12 //int close(int fd); //int open(const char *pathname, int flags); //int open(const char *pathname, int flags, mode_t mode); //ssize_t write(int fd, const void *buf, size_t count); //ssize_t read(int fd, void *buf, size_t count); //off_t lseek(int fd, off_t offset, int whence); int main() { int fd; int offset; char writeBuff[writeNum] {0}; char readBuff[readNum] {0}; char *test hello world!; strcpy(writeBuff,test); fd open(fileName,O_RDWR|O_CREAT,0755); if(fd -1) { printf(open failed\n); perror(why); return -1; } printf(open successed\n); offset lseek(fd,0,SEEK_END); printf(offset is %d\n,offset); write(fd,writeBuff[0],12); close(fd); return 、mian函数参数int main(int argc,char *argv[]) { return 0; }C语言规定了main函数的参数只能有两个一个是argc,一个是argv并且argc只能是整数第二个必须是指向字符 串的指针数组。由于main函数不能被其它函数调用 因此不可能在程序内部取得实际值。那么在何处把实参值赋予main 函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时 在DOS提示符下键入文件名再输入实际参数即可把这些实参传送到main的形参中去。DOS提示符下命令行 的一般形式为C:可执行文件名 参数 参数……; 但是应该特别注意的是main 的两个形参和命令行中的参数在 位置上不是一一对应的。argc: 参数表示命令行中参数的个数注意 文本名本身也是一个参数rgc的值是在输入命令行时由系统按 实际参数的个数自动赋予的。argv 参数是字符串指针数组其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组 的长度即为参数个数。数组元素初值由系统自动赋予。#includestdio.h int main(int argc,char *argv[]) { printf(param total %d\n,argc); printf(param first is %s\n,argv[0]); printf(param second is %s\n,argv[1]); printf(param third is %s\n,argv[2]); return 0; }