[Open]
#include //fcntl.h - file control options
Open 有兩種型態 :
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
以下範例表達 :
int fd;//宣告int型態的file open狀態容器
char buff[1024];
打開的用法fd = open("filename", 權限);
//filename 在Linux driver中,通常是上層用來做device node的開啟 -> /sys/..../device_node
假設開啟成功 fd = 0 ,如果失敗 => 小於0 或負數(返回值:成功return 0,出現錯誤return -1並設置
errno
)write(fd, );
1 = read(fd1,buff,sizeof(buff))) > 0);
//read 等於1 代表大小大於0‧ 還有值 可以繼續讀取,通常用於while迴圈‧
close(fd); //(返回值:成功return 0,出現錯誤return -1並設置
errno
)權限一覽表 :
O_RDONLY | 開啟檔案(唯讀). |
O_WRONLY | 開啟檔案(唯寫). |
O_RDWR | 開啟檔案(可被讀跟寫). |
O_APPEND | Append new information to the end of the file. |
O_TRUNC | Initially clear all data from the file. |
O_CREAT | 如果未存在這個檔案,那就建立這個檔案‧ |
O_EXCL | Combined with the O_CREAT option, it ensures that the caller must create the file. If the file already exists, the call will fail. |
ERROR CODE TABLE(errno table) | ||
---|---|---|
Error number | Error Code | Error Description |
1 | EPERM | Operation not permitted |
2 | ENOENT | No such file or directory |
3 | ESRCH | No such process |
4 | EINTR | Interrupted system call |
5 | EIO | I/O error |
6 | ENXIO | No such device or address |
7 | E2BIG | Argument list too long |
8 | ENOEXEC | Exec format error |
9 | EBADF | Bad file number |
10 | ECHILD | No child processes |
11 | EAGAIN | Try again |
12 | ENOMEM | Out of memory |
13 | EACCES | Permission denied |
14 | EFAULT | Bad address |
15 | ENOTBLK | Block device required |
16 | EBUSY | Device or resource busy |
17 | EEXIST | File exists |
18 | EXDEV | Cross-device link |
19 | ENODEV | No such device |
20 | ENOTDIR | Not a directory |
21 | EISDIR | Is a directory |
22 | EINVAL | Invalid argument |
23 | ENFILE | File table overflow |
24 | EMFILE | Too many open files |
25 | ENOTTY | Not a typewriter |
26 | ETXTBSY | Text file busy |
27 | EFBIG | File too large |
28 | ENOSPC | No space left on device |
29 | ESPIPE | Illegal seek |
30 | EROFS | Read-only file system |
31 | EMLINK | Too many links |
32 | EPIPE | Broken pipe |
33 | EDOM | Math argument out of domain of func |
34 | ERANGE | Math result not representable |
35 | EDEADLK | Resource deadlock would occur |
36 | ENAMETOOLONG | File name too long |
37 | ENOLCK | No record locks available |
38 | ENOSYS | Function not implemented |
39 | ENOTEMPTY | Directory not empty |
40 | ELOOP | Too many symbolic links encountered |
42 | ENOMSG | No message of desired type |
43 | EIDRM | Identifier removed |
44 | ECHRNG | Channel number out of range |
45 | EL2NSYNC | Level 2 not synchronized |
46 | EL3HLT | Level 3 halted |
47 | EL3RST | Level 3 reset |
48 | ELNRNG | Link number out of range |
49 | EUNATCH | Protocol driver not attached |
50 | ENOCSI | No CSI structure available |
51 | EL2HLT | Level 2 halted |
52 | EBADE | Invalid exchange |
53 | EBADR | Invalid request descriptor |
54 | EXFULL | Exchange full |
55 | ENOANO | No anode |
56 | EBADRQC | Invalid request code |
57 | EBADSLT | Invalid slot |
59 | EBFONT | Bad font file format |
60 | ENOSTR | Device not a stream |
61 | ENODATA | No data available |
62 | ETIME | Timer expired |
63 | ENOSR | Out of streams resources |
64 | ENONET | Machine is not on the network |
65 | ENOPKG | Package not installed |
66 | EREMOTE | Object is remote |
67 | ENOLINK | Link has been severed |
68 | EADV | Advertise error |
69 | ESRMNT | Srmount error |
70 | ECOMM | Communication error on send |
71 | EPROTO | Protocol error |
72 | EMULTIHOP | Multihop attempted |
73 | EDOTDOT | RFS specific error |
74 | EBADMSG | Not a data message |
75 | EOVERFLOW | Value too large for defined data type |
76 | ENOTUNIQ | Name not unique on network |
77 | EBADFD | File descriptor in bad state |
78 | EREMCHG | Remote address changed |
79 | ELIBACC | Can not access a needed shared library |
80 | ELIBBAD | Accessing a corrupted shared library |
81 | ELIBSCN | .lib section in a.out corrupted |
82 | ELIBMAX | Attempting to link in too many shared libraries |
83 | ELIBEXEC | Cannot exec a shared library directly |
84 | EILSEQ | Illegal byte sequence |
85 | ERESTART | Interrupted system call should be restarted |
86 | ESTRPIPE | Streams pipe error |
87 | EUSERS | Too many users |
88 | ENOTSOCK | Socket operation on non-socket |
89 | EDESTADDRREQ | Destination address required |
90 | EMSGSIZE | Message too long |
91 | EPROTOTYPE | Protocol wrong type for socket |
92 | ENOPROTOOPT | Protocol not available |
93 | EPROTONOSUPPORT | Protocol not supported |
94 | ESOCKTNOSUPPORT | Socket type not supported |
95 | EOPNOTSUPP | Operation not supported on transport endpoint |
96 | EPFNOSUPPORT | Protocol family not supported |
97 | EAFNOSUPPORT | Address family not supported by protocol |
98 | EADDRINUSE | Address already in use |
99 | EADDRNOTAVAIL | Cannot assign requested address |
100 | ENETDOWN | Network is down |
101 | ENETUNREACH | Network is unreachable |
102 | ENETRESET | Network dropped connection because of reset |
103 | ECONNABORTED | Software caused connection abort |
104 | ECONNRESET | Connection reset by peer |
105 | ENOBUFS | No buffer space available |
106 | EISCONN | Transport endpoint is already connected |
107 | ENOTCONN | Transport endpoint is not connected |
108 | ESHUTDOWN | Cannot send after transport endpoint shutdown |
109 | ETOOMANYREFS | Too many references: cannot splice |
110 | ETIMEDOUT | Connection timed out |
111 | ECONNREFUSED | Connection refused |
112 | EHOSTDOWN | Host is down |
113 | EHOSTUNREACH | No route to host |
114 | EALREADY | Operation already in progress |
115 | EINPROGRESS | Operation now in progress |
116 | ESTALE | Stale NFS file handle |
117 | EUCLEAN | Structure needs cleaning |
118 | ENOTNAM | Not a XENIX named type file |
119 | ENAVAIL | No XENIX semaphores available |
120 | EISNAM | Is a named type file |
121 | EREMOTEIO | Remote I/O error |
122 | EDQUOT | Quota exceeded |
123 | ENOMEDIUM | No medium found |
124 | EMEDIUMTYPE | Wrong medium type |
125 | ECANCELED | Operation Canceled |
126 | ENOKEY | Required key not available |
127 | EKEYEXPIRED | Key has expired |
128 | EKEYREVOKED | Key has been revoked |
129 | EKEYREJECTED | Key was rejected by service |
130 | EOWNERDEAD | Owner died |
131 | ENOTRECOVERABLE | State not recoverable |
=============================================
[Fopen]
#include
FOPEN : FILE * fopen(const char * path,const char * mode);
Example :
FILE *input;
input=fopen(FILE_PATH,"r");
if ( input==NULL )
{
fprintf(stderr, "Open file:%s fail!", FILE_PATH);
return;
}
===============================================================
FCLOSE : int result fclose(FILE*);
Example :
input = fopen(FILE_PATH,"r");
fclose(input);
===============================================================
FREAD : fread(void *buffer,int num_byte,int count,FILE *fp);
Example :
FILE *input;
int result;
char * buffer;
input = fopen(FILE_PATH,"r");
if ( input == NULL )
{
fprintf(stderr, "Open file:%s fail!", FILE_PATH);
return;
}
result = fread (buffer,1, Size,input );
if (result == -1)
{
printf("File read error!!!");
fclose (pFile);
return -1;
}
fclose (input);
return 0;
/* FreeRTOS若無file system 要使用fread 之替代方案 */
uint32_t copy_data(uint8_t *data ,uint32_t data_len)
{
uint32_t size = 0;
uint32_t i;
//memset(data,0,data_len);
for(i = 0; i < data_len; i++)
{
data[i] = bt_binData[i + copyIndex];
size++;
}
copyIndex = copyIndex + size;
PRINTF("copyIndex=%d", copyIndex);
return size;
}
===============================================================
FWRITE : fwrite(void *buffer,int num_byte,int count,FILE *fp);
Example :
FSCANF : fscanf(FILE *fp, constchar* format, [argument ... ]);
用途 : 從檔案讀取數據到宣告的容器中。
Retrun type : 回傳讀入個數,錯誤回傳-1(EOF)。
Example :
int main(void)
{
char a1[20], a2[20];
FILE *input;
input=fopen(FILE_PATH,"r");
if (input==NULL)
{
fprintf(stderr, "Open file:%s fail!", FILE_PATH);
return -1;
}
fscanf(input, "%s%s", a1, a2);
fclose(input);
printf("%s %s\n", a1, a2);
return 0;
}
{
char a1[20], a2[20];
FILE *input;
input=fopen(FILE_PATH,"r");
if (input==NULL)
{
fprintf(stderr, "Open file:%s fail!", FILE_PATH);
return -1;
}
fscanf(input, "%s%s", a1, a2);
fclose(input);
printf("%s %s\n", a1, a2);
return 0;
}
FSEEK :
FPRINTF :
Extend from : ext2_io.h
Type : Embeded C
OPEN
int write_device_node(char* node, char* value)
{
int fd = open(node, O_RDWR);
if(fd<0 nbsp="" p=""> {
printf("open %s for write failed\n", node);
return -1;
}
int ret = write(fd, value, strlen(value));
close(fd);
return ret;
}
0>
沒有留言:
張貼留言