1 files modified
4 files added
| | |
| | | #include <fcntl.h> |
| | | |
| | | |
| | | #define TEST_DIR "dir" |
| | | #define TEST_DIR "testdir" |
| | | |
| | | int main(int argc, char **argv) |
| | | { |
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2018 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: ds18b20.c |
| | | * Description: This file is temperature sensor DS18B20 code |
| | | * |
| | | * Version: 1.0.0(2018/10/14) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #include <stdio.h> |
| | | #include <stdlib.h> |
| | | #include <unistd.h> |
| | | #include <fcntl.h> |
| | | #include <dirent.h> |
| | | #include <string.h> |
| | | #include <time.h> |
| | | #include <errno.h> |
| | | |
| | | int ds18b20_get_temperature(float *temp); |
| | | |
| | | int main(int argc, char *argv[]) |
| | | { |
| | | float temp; |
| | | |
| | | if( ds18b20_get_temperature(&temp) < 0 ) |
| | | { |
| | | printf("ERROR: ds18b20 get temprature failure\n"); |
| | | return 1; |
| | | } |
| | | |
| | | printf("DS19B20 get temperature: %f ℃\n", temp); |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | /* File Content: |
| | | pi@raspberrypi:~/guowenxue $ cat /sys/bus/w1/devices/28-041731f7c0ff/w1_slave |
| | | 3a 01 4b 46 7f ff 0c 10 a5 : crc=a5 YES |
| | | 3a 01 4b 46 7f ff 0c 10 a5 t=19625 |
| | | */ |
| | | |
| | | int ds18b20_get_temperature(float *temp) |
| | | { |
| | | char w1_path[50] = "/sys/bus/w1/devices/"; |
| | | char chip[20]; |
| | | char buf[128]; |
| | | DIR *dirp; |
| | | struct dirent *direntp; |
| | | int fd =-1; |
| | | char *ptr; |
| | | float value; |
| | | int found = 0; |
| | | |
| | | if( !temp ) |
| | | { |
| | | return -1; |
| | | } |
| | | |
| | | /*+-------------------------------------------------------------------+ |
| | | *| open dierectory /sys/bus/w1/devices to get chipset Serial Number | |
| | | *+-------------------------------------------------------------------+*/ |
| | | if((dirp = opendir(w1_path)) == NULL) |
| | | { |
| | | printf("opendir error: %s\n", strerror(errno)); |
| | | return -2; |
| | | } |
| | | |
| | | while((direntp = readdir(dirp)) != NULL) |
| | | { |
| | | if(strstr(direntp->d_name,"28-")) |
| | | { |
| | | /* find and get the chipset SN filename */ |
| | | strcpy(chip,direntp->d_name); |
| | | found = 1; |
| | | break; |
| | | } |
| | | } |
| | | closedir(dirp); |
| | | |
| | | if( !found ) |
| | | { |
| | | printf("Can not find ds18b20 in %s\n", w1_path); |
| | | return -3; |
| | | } |
| | | |
| | | /* get DS18B20 sample file full path: /sys/bus/w1/devices/28-xxxx/w1_slave */ |
| | | strncat(w1_path, chip, sizeof(w1_path)-strlen(w1_path)); |
| | | strncat(w1_path, "/w1_slave", sizeof(w1_path)-strlen(w1_path)); |
| | | |
| | | /* open file /sys/bus/w1/devices/28-xxxx/w1_slave to get temperature */ |
| | | if( (fd=open(w1_path, O_RDONLY)) < 0 ) |
| | | { |
| | | printf("open %s error: %s\n", w1_path, strerror(errno)); |
| | | return -4; |
| | | } |
| | | |
| | | if(read(fd, buf, sizeof(buf)) < 0) |
| | | { |
| | | printf("read %s error: %s\n", w1_path, strerror(errno)); |
| | | return -5; |
| | | } |
| | | |
| | | ptr = strstr(buf, "t="); |
| | | if( !ptr ) |
| | | { |
| | | printf("ERROR: Can not get temperature\n"); |
| | | return -6; |
| | | } |
| | | |
| | | ptr+=2; |
| | | |
| | | /* convert string value to float value */ |
| | | *temp = atof(ptr)/1000; |
| | | |
| | | close(fd); |
| | | |
| | | return 0; |
| | | } |
New file |
| | |
| | | SRCFILES = $(wildcard *.c) |
| | | BINARIES=$(SRCFILES:%.c=%) |
| | | |
| | | all: ${BINARIES} |
| | | |
| | | %: %.c |
| | | $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) |
| | | |
| | | clean: |
| | | @rm -f ${BINARIES} |
| | | @rm -f *.txt |
| | | @rm -rf testdir |
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2023 LingYun IoT System Studio. |
| | | * All rights reserved. |
| | | * |
| | | * Filename: mycp.c |
| | | * Description: This file file copy example code, don't not support foler. |
| | | * |
| | | * Version: 1.0.0(2023年08月09日) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2023年08月09日 10时09分57秒" |
| | | * |
| | | ********************************************************************************/ |
| | | #include <stdio.h> |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | #include <errno.h> |
| | | #include <unistd.h> |
| | | #include <libgen.h> |
| | | #include <sys/types.h> |
| | | #include <sys/stat.h> |
| | | #include <fcntl.h> |
| | | |
| | | int main (int argc, char **argv) |
| | | { |
| | | struct stat sbuf; |
| | | char *progname = basename(argv[0]); |
| | | char *src, *dst; |
| | | int fd_src, fd_dst; |
| | | char buf[2048]; |
| | | int rv, left; |
| | | |
| | | if( argc != 3 ) |
| | | { |
| | | printf("Usage: %s [src] [dst]\n", progname); |
| | | return 0; |
| | | } |
| | | src = argv[1]; |
| | | dst = argv[2]; |
| | | |
| | | /* check file type */ |
| | | if( stat(src, &sbuf) ) |
| | | { |
| | | printf("%s: cannot stat '%s': %s\n", progname, src, strerror(errno)); |
| | | return 2; |
| | | } |
| | | |
| | | if( !S_ISREG(sbuf.st_mode) ) |
| | | { |
| | | printf("%s: %s is not text file\n", progname, src); |
| | | return 3; |
| | | } |
| | | |
| | | /* open files */ |
| | | if( (fd_src=open(src, O_RDONLY)) < 0 ) |
| | | { |
| | | printf("%s: open '%s' failure: %s\n", progname, src, strerror(errno)); |
| | | return 4; |
| | | } |
| | | |
| | | if( (fd_dst=open(dst, O_RDWR|O_TRUNC|O_CREAT, sbuf.st_mode&0x777)) < 0 ) |
| | | { |
| | | printf("%s: open '%s' failure: %s\n", progname, dst, strerror(errno)); |
| | | return 5; |
| | | } |
| | | |
| | | /* copy file content */ |
| | | left = sbuf.st_size; |
| | | while( left > 0 ) |
| | | { |
| | | rv = read(fd_src, buf, sizeof(buf)); |
| | | if( rv > 0) |
| | | { |
| | | rv = write(fd_dst, buf, rv); |
| | | left -= rv; |
| | | } |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2023 LingYun IoT System Studio. |
| | | * All rights reserved. |
| | | * |
| | | * Filename: mycp.c |
| | | * Description: This file is ls command example code. |
| | | * |
| | | * Version: 1.0.0(2023年08月08日) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2023年08月08日 17时17分00秒" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #include <stdio.h> |
| | | #include <stdlib.h> |
| | | #include <string.h> |
| | | #include <errno.h> |
| | | #include <unistd.h> |
| | | #include <dirent.h> |
| | | #include <time.h> |
| | | #include <pwd.h> |
| | | #include <grp.h> |
| | | #include <sys/types.h> |
| | | #include <sys/stat.h> |
| | | |
| | | #define PROGNAME "myls" |
| | | |
| | | static int myls(char *path); |
| | | |
| | | int main (int argc, char **argv) |
| | | { |
| | | int fd; |
| | | int i; |
| | | |
| | | if( 1 == argc ) |
| | | { |
| | | myls("."); |
| | | return 0; |
| | | } |
| | | |
| | | for(i=1; i<argc; i++) |
| | | { |
| | | myls(argv[i]); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void print_filemode(mode_t mode) |
| | | { |
| | | /* print file type */ |
| | | if( S_ISREG(mode) ) |
| | | { |
| | | printf("-"); |
| | | } |
| | | else if( S_ISDIR(mode) ) |
| | | { |
| | | printf("d"); |
| | | } |
| | | else if( S_ISCHR(mode) ) |
| | | { |
| | | printf("c"); |
| | | } |
| | | else if( S_ISBLK(mode) ) |
| | | { |
| | | printf("b"); |
| | | } |
| | | else if( S_ISFIFO(mode) ) |
| | | { |
| | | printf("f"); |
| | | } |
| | | else if( S_ISLNK(mode) ) |
| | | { |
| | | printf("l"); |
| | | } |
| | | else if( S_ISSOCK(mode) ) |
| | | { |
| | | printf("s"); |
| | | } |
| | | |
| | | /* print file mode */ |
| | | printf("%c", (S_IRUSR&mode) ? 'r' : '-'); |
| | | printf("%c", (S_IWUSR&mode) ? 'w' : '-'); |
| | | printf("%c", (S_IXUSR&mode) ? 'x' : '-'); |
| | | |
| | | printf("%c", (S_IRGRP&mode) ? 'r' : '-'); |
| | | printf("%c", (S_IWGRP&mode) ? 'w' : '-'); |
| | | printf("%c", (S_IXGRP&mode) ? 'x' : '-'); |
| | | |
| | | printf("%c", (S_IROTH&mode) ? 'r' : '-'); |
| | | printf("%c", (S_IWOTH&mode) ? 'w' : '-'); |
| | | printf("%c", (S_IXOTH&mode) ? 'x' : '-'); |
| | | |
| | | printf(" "); |
| | | |
| | | return ; |
| | | } |
| | | |
| | | int print_info(char *file) |
| | | { |
| | | struct stat sbuf; |
| | | struct passwd *u; |
| | | struct group *g; |
| | | time_t t; |
| | | struct tm *ptm; |
| | | char mtime[32]; |
| | | |
| | | stat(file, &sbuf); |
| | | |
| | | print_filemode(sbuf.st_mode); |
| | | |
| | | /* print number of hard links */ |
| | | printf("%2lu ", sbuf.st_nlink); |
| | | |
| | | /* print user name or user id */ |
| | | u = getpwuid (sbuf.st_uid); |
| | | if( u ) |
| | | printf("%s ", u->pw_name); |
| | | else |
| | | printf("%d ", sbuf.st_uid); |
| | | |
| | | /* print group name or group id */ |
| | | g = getgrgid (sbuf.st_gid); |
| | | if( g ) |
| | | printf("%s ", g->gr_name); |
| | | else |
| | | printf("%d ", sbuf.st_uid); |
| | | |
| | | /* print file size */ |
| | | printf("%6lu ", sbuf.st_size); |
| | | |
| | | /* print time of last modification, Time functions: |
| | | * https://www.jianshu.com/p/e92ced44f216 |
| | | * https://blog.csdn.net/chen1415886044/article/details/106883544 |
| | | */ |
| | | t = (time_t)sbuf.st_mtim.tv_sec; |
| | | ptm = localtime(&t); |
| | | strftime(mtime, sizeof(mtime), "%b %e %R", ptm); |
| | | printf("%s ", mtime); |
| | | |
| | | printf("%s", file); |
| | | |
| | | printf("\n"); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int myls(char *path) |
| | | { |
| | | struct stat sbuf; |
| | | DIR *dirp; |
| | | struct dirent *dir; |
| | | char filepath[512]; |
| | | |
| | | /* Check file exist or not */ |
| | | if( access(path, F_OK) ) |
| | | { |
| | | printf("%s: cannot access '%s': %s\n", PROGNAME, path, strerror(errno)); |
| | | return -2; |
| | | } |
| | | |
| | | stat(path, &sbuf); |
| | | |
| | | /* list file */ |
| | | if( !S_ISDIR(sbuf.st_mode) ) |
| | | { |
| | | print_info(path); |
| | | return 0; |
| | | } |
| | | |
| | | /* list folder */ |
| | | dirp = opendir(path); |
| | | if( !dirp ) |
| | | { |
| | | printf("%s: cannot open directory '%s': %s\n", PROGNAME, path, strerror(errno)); |
| | | return -3; |
| | | } |
| | | |
| | | while( NULL != (dir=readdir(dirp)) ) |
| | | { |
| | | if( !strcmp(path, ".") ) |
| | | strncpy(filepath, dir->d_name, sizeof(filepath)); |
| | | else |
| | | snprintf(filepath, sizeof(filepath), "%s/%s", path, dir->d_name); |
| | | |
| | | print_info(filepath); |
| | | } |
| | | |
| | | return 0; |
| | | } |