main函数如何获得重定向参数
自己编写了一个more,计算百分比时。重定向后的参数不会获得。
./mymore <mymore.c
提问:C如何获得重定向后的参数?
[解决办法]
这个获得起来就比较曲折了, 如果是 windows, 可以这样:
- C/C++ code
#include <locale.h>#include <stdio.h>#include <Windows.h>#include <io.h>typedef long NTSTATUS;#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)typedef struct _IO_STATUS_BLOCK{ union { NTSTATUS Status; PVOID Pointer; }; ULONG_PTR Information;} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;typedef struct _OBJECT_NAME_INFORMATION{ ULONG FileNameLength; WCHAR FileName[1];} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;typedef NTSTATUS (NTAPI *NTQUERYINFORMATIONFILE)( IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN DWORD Length, IN int FileInformationClass );NTQUERYINFORMATIONFILE NtQueryInformationFile = NULL;int main(int argc, char* argv[]){ setlocale(0, "chs"); NTSTATUS status = -1; HMODULE hNtdll = NULL; HANDLE hFile = INVALID_HANDLE_VALUE; IO_STATUS_BLOCK IoStatus = {0}; POBJECT_NAME_INFORMATION pfni = NULL; size_t allocSize = 0; hNtdll = LoadLibrary("ntdll.dll"); NtQueryInformationFile = (NTQUERYINFORMATIONFILE)GetProcAddress(hNtdll, "NtQueryInformationFile"); hFile = (HANDLE)_get_osfhandle(fileno(stdin)); if (hFile != INVALID_HANDLE_VALUE) { allocSize = sizeof(OBJECT_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR); pfni = (POBJECT_NAME_INFORMATION)malloc(allocSize); if (pfni != NULL) { RtlZeroMemory(pfni, allocSize); status = NtQueryInformationFile(hFile, &IoStatus, pfni, allocSize, 9); if (NT_SUCCESS(status)) wprintf(L"文件名: %s\n", pfni->FileName); free(pfni); } CloseHandle(hFile); } FreeLibrary(hNtdll);}